├── src ├── FragFXUnits_sawagi1.h ├── ofxKsmrFragFXUnit.h ├── ofxKsmrFragFXUnit.cpp ├── FragFXUnits_verticalSlide.h ├── FragFXUnits_Invert.h ├── FragFXUnits_Fringe.h ├── ofxKsmrFragmentFx.h ├── FragFXUnits_EdgeOnTop.h ├── FragFXUnits_test1.h ├── ofxKsmrFragmentFx.cpp ├── FragFXUnits_verticalNoise.h ├── FragFXUnits_water.h ├── FragFXUnits_SlantShift.h ├── FragFXUnits_TexChip.h └── FragFXUnits_noise.h └── example ├── main.cpp ├── ofApp.h ├── ofApp.cpp └── sheepImage.h /src/FragFXUnits_sawagi1.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_sawagi1.h 3 | // postFxVJ 4 | // 5 | // Created by Ovis aries on 2015/05/12. 6 | // 7 | // 8 | 9 | #ifndef postFxVJ_FragFXUnits_sawagi1_h 10 | #define postFxVJ_FragFXUnits_sawagi1_h 11 | 12 | 13 | #endif 14 | -------------------------------------------------------------------------------- /example/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | #include "ofApp.h" 3 | 4 | //======================================================================== 5 | int main( ){ 6 | ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context 7 | 8 | // this kicks off the running of my app 9 | // can be OF_WINDOW or OF_FULLSCREEN 10 | // pass in width and height too: 11 | ofRunApp(new ofApp()); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /example/ofApp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxKsmrFragmentFx.h" 5 | 6 | class ofApp : public ofBaseApp{ 7 | 8 | public: 9 | void setup(); 10 | void update(); 11 | void draw(); 12 | 13 | void keyPressed(int key); 14 | void keyReleased(int key); 15 | void mouseMoved(int x, int y ); 16 | void mouseDragged(int x, int y, int button); 17 | void mousePressed(int x, int y, int button); 18 | void mouseReleased(int x, int y, int button); 19 | void windowResized(int w, int h); 20 | void dragEvent(ofDragInfo dragInfo); 21 | void gotMessage(ofMessage msg); 22 | 23 | ofFbo::Settings setting; 24 | ofFbo original; 25 | 26 | ofxKsmrFragmentFx fx; 27 | 28 | ofImage image; 29 | }; 30 | -------------------------------------------------------------------------------- /src/ofxKsmrFragFXUnit.h: -------------------------------------------------------------------------------- 1 | // 2 | // ofxKsmrFragFXUnit.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef __no_1_fxGenerator__ofxKsmrFragFXUnit__ 10 | #define __no_1_fxGenerator__ofxKsmrFragFXUnit__ 11 | 12 | #include "ofMain.h" 13 | 14 | #define STRINGIFY(A) #A 15 | 16 | class ofxKsmrFragFXUnit { 17 | public: 18 | 19 | ofxKsmrFragFXUnit(){ 20 | 21 | } 22 | ~ofxKsmrFragFXUnit(){ 23 | 24 | } 25 | 26 | virtual void setup(); 27 | void linkProgram(); 28 | 29 | bool bEnable; 30 | ofShader shader; 31 | string source; 32 | string Name; 33 | 34 | float u_Volume; 35 | float u_BufScaleW; 36 | float u_BufScaleH; 37 | }; 38 | 39 | #endif /* defined(__no_1_fxGenerator__ofxKsmrFragFXUnit__) */ 40 | -------------------------------------------------------------------------------- /src/ofxKsmrFragFXUnit.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // ofxKsmrFragFXUnit.cpp 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #include "ofxKsmrFragFXUnit.h" 10 | 11 | void ofxKsmrFragFXUnit::setup(){ 12 | 13 | Name = "Basic"; 14 | 15 | source = STRINGIFY( 16 | 17 | uniform sampler2DRect tex0; 18 | 19 | void main(void){ 20 | vec2 st = gl_TexCoord[0].st; 21 | vec3 col; 22 | 23 | col.r = texture2DRect(tex0, vec2(st.x,st.y)).r; 24 | col.g = texture2DRect(tex0, vec2(st.x,st.y)).g; 25 | col.b = texture2DRect(tex0, vec2(st.x,st.y)).b; 26 | 27 | gl_FragColor = vec4(col,1.0); 28 | } 29 | 30 | ); 31 | 32 | } 33 | 34 | void ofxKsmrFragFXUnit::linkProgram(){ 35 | bEnable = false; 36 | 37 | shader.unload(); 38 | shader.setupShaderFromSource(GL_FRAGMENT_SHADER, source); 39 | shader.linkProgram(); 40 | } -------------------------------------------------------------------------------- /src/FragFXUnits_verticalSlide.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_verticalSlide.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/12. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_verticalSlide_h 10 | #define no_1_fxGenerator_FragFXUnits_verticalSlide_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_verticalSlide : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "VerticalSlide"; 19 | u_Volume = 1.0; 20 | 21 | source = STRINGIFY( 22 | uniform float Volume; 23 | uniform float Phase; 24 | uniform float ScaleW; 25 | uniform float ScaleH; 26 | 27 | uniform sampler2DRect tex0; 28 | 29 | void main(void){ 30 | vec2 st = gl_TexCoord[0].st; 31 | vec4 col; 32 | 33 | col = texture2DRect(tex0, vec2(st.x,mod(st.y+Phase*Volume,ScaleH))); 34 | 35 | gl_FragColor = vec4(col); 36 | } 37 | 38 | ); 39 | } 40 | }; 41 | 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /src/FragFXUnits_Invert.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_Invert.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/07. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_Invert_h 10 | #define no_1_fxGenerator_FragFXUnits_Invert_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_Invert : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "Invert"; 19 | u_Volume = 1.0; 20 | 21 | source = STRINGIFY( 22 | uniform float Volume; 23 | uniform float Phase; 24 | uniform sampler2DRect tex0; 25 | 26 | void main(void){ 27 | vec2 st = gl_TexCoord[0].st; 28 | vec3 col; 29 | 30 | col.r = texture2DRect(tex0, vec2(st.x,st.y)).r; 31 | col.b = texture2DRect(tex0, vec2(st.x,st.y)).b; 32 | col.g = texture2DRect(tex0, vec2(st.x,st.y)).g; 33 | 34 | col.r += ((1.0 - col.r) - col.r) * Volume; 35 | col.g += ((1.0 - col.g) - col.g) * Volume; 36 | col.b += ((1.0 - col.b) - col.b) * Volume; 37 | 38 | gl_FragColor = vec4(col,1.0); 39 | } 40 | 41 | ); 42 | } 43 | }; 44 | 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /src/FragFXUnits_Fringe.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_Fringe.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef __no_1_fxGenerator__FragFXUnits_Fringe__ 10 | #define __no_1_fxGenerator__FragFXUnits_Fringe__ 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_Fringe : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "Fringe"; 19 | 20 | u_Volume = 0.01; 21 | 22 | source = STRINGIFY( 23 | uniform float Volume; 24 | uniform sampler2DRect tex0; 25 | uniform float ScaleW; 26 | uniform float ScaleH; 27 | 28 | void main(void){ 29 | vec2 center = vec2(ScaleW/2.0, ScaleH/2.0); 30 | vec2 st = gl_TexCoord[0].st; 31 | vec2 rev = (center - st) * Volume; 32 | 33 | vec3 col; 34 | vec3 col_fringe; 35 | 36 | col = texture2DRect(tex0, vec2(st.x,st.y)).rgb; 37 | col_fringe.r = texture2DRect(tex0, vec2(st.x,st.y) + rev).r; 38 | col_fringe.b = texture2DRect(tex0, vec2(st.x,st.y) - rev).b; 39 | col_fringe.g = 0.0; 40 | 41 | col.r = col_fringe.r; 42 | col.b = col_fringe.b; 43 | 44 | gl_FragColor = vec4(col,1.0); 45 | } 46 | 47 | ); 48 | } 49 | 50 | }; 51 | 52 | #endif /* defined(__no_1_fxGenerator__FragFXUnits_Fringe__) */ 53 | -------------------------------------------------------------------------------- /src/ofxKsmrFragmentFx.h: -------------------------------------------------------------------------------- 1 | // 2 | // ofxKsmrFragmentFx.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef __no_1_fxGenerator__ofxKsmrFragmentFx__ 10 | #define __no_1_fxGenerator__ofxKsmrFragmentFx__ 11 | 12 | #include "ofMain.h" 13 | 14 | #include "FragFXUnits_Fringe.h" 15 | #include "FragFXUnits_verticalNoise.h" 16 | #include "FragFXUnits_TexChip.h" 17 | #include "FragFXUnits_SlantShift.h" 18 | #include "FragFXUnits_noise.h" 19 | #include "FragFXUnits_Invert.h" 20 | #include "FragFXUnits_verticalSlide.h" 21 | #include "FragFXUnits_EdgeOnTop.h" 22 | #include "FragFXUnits_water.h" 23 | 24 | enum KsmrFragFx_Type{ 25 | KSMR_FRAGFX_FRINGE, 26 | KSMR_FRAGFX_EDGEONTOP, 27 | KSMR_FRAGFX_VERTNOISE, 28 | KSMR_FRAGFX_SLANTSHIFT, 29 | KSMR_FRAGFX_TEXCHIP, 30 | KSMR_FRAGFX_NOISE, 31 | KSMR_FRAGFX_INVERT, 32 | KSMR_FRAGFX_VERTSLIDE, 33 | KSMR_FRAGFX_WATER 34 | }; 35 | 36 | class ofxKsmrFragmentFx{ 37 | public: 38 | 39 | ofxKsmrFragmentFx(){ 40 | 41 | } 42 | 43 | ~ofxKsmrFragmentFx() 44 | { 45 | for (int i = 0;i < fxUnits.size();i++) 46 | delete fxUnits[i]; 47 | 48 | fxUnits.clear(); 49 | } 50 | 51 | void setup(ofFbo* buf, ofFbo::Settings setting); 52 | void applyFx(); 53 | 54 | ofFbo* getBuffer(){return dstPtr;}; 55 | 56 | vector fxUnits; 57 | ofxKsmrFragFXUnit* getfxUnit(KsmrFragFx_Type type); 58 | 59 | ofFbo *sourceBuf; 60 | ofFbo buffer[2]; 61 | 62 | ofFbo *srcPtr; 63 | ofFbo *dstPtr; 64 | }; 65 | 66 | #endif /* defined(__no_1_fxGenerator__ofxKsmrFragmentFx__) */ 67 | -------------------------------------------------------------------------------- /src/FragFXUnits_EdgeOnTop.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_EdgeOnTop.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/12. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_EdgeOnTop_h 10 | #define no_1_fxGenerator_FragFXUnits_EdgeOnTop_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_EdgeOnTop : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "EdgeOnTop"; 19 | u_Volume = 1.0; 20 | 21 | source = STRINGIFY( 22 | uniform float Volume; 23 | uniform float Phase; 24 | uniform float ScaleW; 25 | uniform float ScaleH; 26 | 27 | uniform sampler2DRect tex0; 28 | 29 | void main(void){ 30 | vec2 st = gl_TexCoord[0].st; 31 | vec4 col; 32 | vec3 max = vec3(0.0,0.0,0.0); 33 | vec3 min = vec3(1.0,1.0,1.0); 34 | 35 | int i = 0; 36 | int j = 0; 37 | for (i; i < 3;i++){ 38 | for (j; j < 3;j++){ 39 | vec4 c = texture2DRect(tex0, vec2(st.x + float(i) - 1.0, 40 | st.y + float(j) - 1.0)); 41 | 42 | max.r = max(max.r, c.r); 43 | min.r = min(min.r, c.r); 44 | max.g = max(max.g, c.g); 45 | min.g = min(min.g, c.g); 46 | max.b = max(max.b, c.b); 47 | min.b = min(min.b, c.b); 48 | 49 | } 50 | } 51 | 52 | col = texture2DRect(tex0, vec2(st.x, st.y)); 53 | 54 | vec3 br = vec3(pow(max.r - min.r,2.0), 55 | pow(max.g - min.g,2.0), 56 | pow(max.b - min.b,2.0)); 57 | 58 | gl_FragColor = vec4(br,1.0) + col; 59 | } 60 | 61 | ); 62 | } 63 | }; 64 | 65 | 66 | #endif 67 | -------------------------------------------------------------------------------- /src/FragFXUnits_test1.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_test1.h 3 | // postFxVJ 4 | // 5 | // Created by Ovis aries on 2015/05/12. 6 | // 7 | // 8 | 9 | #ifndef postFxVJ_FragFXUnits_test1_h 10 | #define postFxVJ_FragFXUnits_test1_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_test1 : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "test1"; 19 | u_Volume = 1.0; 20 | 21 | source = STRINGIFY( 22 | uniform float Volume; 23 | uniform float Phase; 24 | uniform float ScaleW; 25 | uniform float ScaleH; 26 | 27 | uniform sampler2DRect tex0; 28 | 29 | void main(void){ 30 | vec2 st = gl_TexCoord[0].st; 31 | vec4 col; 32 | vec3 max = vec3(0.0,0.0,0.0); 33 | vec3 min = vec3(1.0,1.0,1.0); 34 | 35 | int i = 0; 36 | int j = 0; 37 | for (i; i < 3;i++){ 38 | for (j; j < 3;j++){ 39 | vec4 c = texture2DRect(tex0, vec2(st.x + float(i) - 1.0, 40 | st.y + float(j) - 1.0)); 41 | 42 | max.r = max(max.r, c.r); 43 | min.r = min(min.r, c.r); 44 | max.g = max(max.g, c.g); 45 | min.g = min(min.g, c.g); 46 | max.b = max(max.b, c.b); 47 | min.b = min(min.b, c.b); 48 | 49 | } 50 | } 51 | 52 | col = texture2DRect(tex0, vec2(st.x, st.y)); 53 | 54 | vec3 br = vec3(pow(max.r - min.r,2.0), 55 | pow(max.g - min.g,2.0), 56 | pow(max.b - min.b,2.0)); 57 | 58 | gl_FragColor = vec4(br,1.0) + col; 59 | } 60 | 61 | ); 62 | } 63 | }; 64 | 65 | #endif 66 | -------------------------------------------------------------------------------- /src/ofxKsmrFragmentFx.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // ofxKsmrFragmentFx.cpp 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #include "ofxKsmrFragmentFx.h" 10 | 11 | void ofxKsmrFragmentFx::setup(ofFbo* buf, ofFbo::Settings setting){ 12 | 13 | sourceBuf = buf; 14 | buffer[0].allocate(setting); 15 | buffer[1].allocate(setting); 16 | 17 | fxUnits.push_back(new FragFXUnits_Fringe()); 18 | fxUnits.push_back(new FragFXUnits_EdgeOnTop()); 19 | fxUnits.push_back(new FragFXUnits_verticalNoise()); 20 | fxUnits.push_back(new FragFXUnits_SlantShift()); 21 | fxUnits.push_back(new FragFXUnits_TexChip()); 22 | fxUnits.push_back(new FragFXUnits_Noise()); 23 | fxUnits.push_back(new FragFXUnits_Invert()); 24 | fxUnits.push_back(new FragFXUnits_verticalSlide()); 25 | fxUnits.push_back(new FragFXUnits_water()); 26 | 27 | for (int i = 0;i < fxUnits.size();i++){ 28 | fxUnits[i]->setup(); 29 | fxUnits[i]->linkProgram(); 30 | fxUnits[i]->u_BufScaleW = setting.width; 31 | fxUnits[i]->u_BufScaleH = setting.height; 32 | } 33 | } 34 | 35 | void ofxKsmrFragmentFx::applyFx(){ 36 | 37 | buffer[0].begin(); 38 | sourceBuf->draw(0,0); 39 | buffer[0].end(); 40 | 41 | srcPtr = &buffer[0]; 42 | dstPtr = &buffer[1]; 43 | 44 | for (int i = 0;i < fxUnits.size();i++){ 45 | 46 | if (fxUnits[i]->bEnable){ 47 | dstPtr->begin(); 48 | 49 | fxUnits[i]->shader.begin(); 50 | fxUnits[i]->shader.setUniformTexture("tex0", srcPtr->getTextureReference(), 0); 51 | fxUnits[i]->shader.setUniform1f("Volume", fxUnits[i]->u_Volume); 52 | fxUnits[i]->shader.setUniform1f("ScaleW", fxUnits[i]->u_BufScaleW); 53 | fxUnits[i]->shader.setUniform1f("ScaleH", fxUnits[i]->u_BufScaleH); 54 | fxUnits[i]->shader.setUniform1f("Phase", ofGetElapsedTimef()); 55 | 56 | glBegin(GL_TRIANGLE_STRIP); 57 | 58 | glTexCoord2d(0.0, 0.0); 59 | glVertex2d(0.0, 0.0); 60 | 61 | glTexCoord2d(buffer[0].getWidth(), 0.0); 62 | glVertex2d(buffer[0].getWidth(), 0.0); 63 | 64 | glTexCoord2d(0.0, buffer[0].getHeight()); 65 | glVertex2d(0.0, buffer[0].getHeight()); 66 | 67 | glTexCoord2d(buffer[0].getWidth(), buffer[0].getHeight()); 68 | glVertex2d(buffer[0].getWidth(), buffer[0].getHeight()); 69 | 70 | glEnd(); 71 | 72 | fxUnits[i]->shader.end(); 73 | 74 | dstPtr->end(); 75 | 76 | swap(srcPtr, dstPtr); 77 | } 78 | 79 | } 80 | 81 | sourceBuf->begin(); 82 | 83 | srcPtr->draw(0,0); 84 | 85 | sourceBuf->end(); 86 | } 87 | 88 | ofxKsmrFragFXUnit* ofxKsmrFragmentFx::getfxUnit(KsmrFragFx_Type type){ 89 | return fxUnits[type]; 90 | } -------------------------------------------------------------------------------- /src/FragFXUnits_verticalNoise.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_verticalNoise.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_verticalNoise_h 10 | #define no_1_fxGenerator_FragFXUnits_verticalNoise_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_verticalNoise : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "vertical Noise"; 19 | 20 | u_Volume = 1.0; 21 | 22 | source = STRINGIFY( 23 | uniform float Volume; 24 | uniform float Phase; 25 | uniform sampler2DRect tex0; 26 | 27 | const int oct = 8; 28 | const float per = 0.5; 29 | const float PI = 3.1415926; 30 | const float cCorners = 1.0 / 16.0; 31 | const float cSides = 1.0 / 8.0; 32 | const float cCenter = 1.0 / 4.0; 33 | 34 | // 補間関数 35 | float interpolate(float a, float b, float x){ 36 | float f = (1.0 - cos(x * PI)) * 0.5; 37 | return a * (1.0 - f) + b * f; 38 | } 39 | 40 | // 乱数生成 41 | float rnd(vec2 p){ 42 | return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453); 43 | } 44 | 45 | // 補間乱数 46 | float irnd(vec2 p){ 47 | vec2 i = floor(p); 48 | vec2 f = fract(p); 49 | vec4 v = vec4(rnd(vec2(i.x, i.y )), 50 | rnd(vec2(i.x + 1.0, i.y )), 51 | rnd(vec2(i.x, i.y + 1.0)), 52 | rnd(vec2(i.x + 1.0, i.y + 1.0))); 53 | return interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y); 54 | } 55 | 56 | // ノイズ生成 57 | float noise(vec2 p){ 58 | float t = 0.0; 59 | for(int i = 0; i < oct; i++){ 60 | float freq = pow(2.0, float(i)); 61 | float amp = pow(per, float(oct - i)); 62 | t += irnd(vec2(p.x / freq, p.y / freq)) * amp; 63 | } 64 | return t; 65 | } 66 | 67 | // シームレスノイズ生成 68 | float snoise(vec2 p, vec2 q, vec2 r){ 69 | return noise(vec2(p.x, p.y )) * q.x * q.y + 70 | noise(vec2(p.x, p.y + r.y)) * q.x * (1.0 - q.y) + 71 | noise(vec2(p.x + r.x, p.y )) * (1.0 - q.x) * q.y + 72 | noise(vec2(p.x + r.x, p.y + r.y)) * (1.0 - q.x) * (1.0 - q.y); 73 | } 74 | 75 | void main(void){ 76 | vec2 st = gl_TexCoord[0].st; 77 | vec2 t = vec2(st.y,Phase*100.0); 78 | float ns = (noise(t) - 0.5)*Volume*300.0; 79 | 80 | vec3 col; 81 | 82 | col.r = texture2DRect(tex0, vec2(st.x+ns,st.y)).r; 83 | col.b = texture2DRect(tex0, vec2(st.x+ns,st.y)).b; 84 | col.g = texture2DRect(tex0, vec2(st.x+ns,st.y)).g; 85 | 86 | gl_FragColor = vec4(col,1.0); 87 | } 88 | 89 | ); 90 | } 91 | 92 | }; 93 | 94 | #endif 95 | -------------------------------------------------------------------------------- /src/FragFXUnits_water.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_verticalNoise.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_Water_h 10 | #define no_1_fxGenerator_FragFXUnits_Water_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_water : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "water"; 19 | 20 | u_Volume = 1.0; 21 | 22 | source = STRINGIFY( 23 | uniform float Volume; 24 | uniform float Phase; 25 | uniform sampler2DRect tex0; 26 | 27 | const int oct = 8; 28 | const float per = 0.5; 29 | const float PI = 3.1415926; 30 | const float cCorners = 1.0 / 16.0; 31 | const float cSides = 1.0 / 8.0; 32 | const float cCenter = 1.0 / 4.0; 33 | 34 | // 補間関数 35 | float interpolate(float a, float b, float x){ 36 | float f = (1.0 - cos(x * PI)) * 0.5; 37 | return a * (1.0 - f) + b * f; 38 | } 39 | 40 | // 乱数生成 41 | float rnd(vec2 p){ 42 | return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453); 43 | } 44 | 45 | // 補間乱数 46 | float irnd(vec2 p){ 47 | vec2 i = floor(p); 48 | vec2 f = fract(p); 49 | vec4 v = vec4(rnd(vec2(i.x, i.y )), 50 | rnd(vec2(i.x + 1.0, i.y )), 51 | rnd(vec2(i.x, i.y + 1.0)), 52 | rnd(vec2(i.x + 1.0, i.y + 1.0))); 53 | return interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y); 54 | } 55 | 56 | // ノイズ生成 57 | float noise(vec2 p){ 58 | float t = 0.0; 59 | for(int i = 0; i < oct; i++){ 60 | float freq = pow(2.0, float(i)); 61 | float amp = pow(per, float(oct - i)); 62 | t += irnd(vec2(p.x / freq, p.y / freq)) * amp; 63 | } 64 | return t; 65 | } 66 | 67 | // シームレスノイズ生成 68 | float snoise(vec2 p, vec2 q, vec2 r){ 69 | return noise(vec2(p.x, p.y )) * q.x * q.y + 70 | noise(vec2(p.x, p.y + r.y)) * q.x * (1.0 - q.y) + 71 | noise(vec2(p.x + r.x, p.y )) * (1.0 - q.x) * q.y + 72 | noise(vec2(p.x + r.x, p.y + r.y)) * (1.0 - q.x) * (1.0 - q.y); 73 | } 74 | 75 | void main(void){ 76 | vec2 st = gl_TexCoord[0].st; 77 | vec2 t = vec2(st.y / 4.0,Phase * 30.0); 78 | vec2 s = vec2(st.x / 3.5,Phase * 42.4); 79 | float ns = (noise(t) - 0.5)*Volume*100.0; 80 | float nt = (noise(s) - 0.5)*Volume*100.0; 81 | 82 | vec3 col; 83 | 84 | col.r = texture2DRect(tex0, vec2(st.x+ns,st.y+nt)).r; 85 | col.b = texture2DRect(tex0, vec2(st.x+ns,st.y+nt)).b; 86 | col.g = texture2DRect(tex0, vec2(st.x+ns,st.y+nt)).g; 87 | 88 | gl_FragColor = vec4(col,1.0); 89 | } 90 | 91 | ); 92 | } 93 | 94 | }; 95 | 96 | #endif 97 | -------------------------------------------------------------------------------- /example/ofApp.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | #include "Poco/Base64Decoder.h" 4 | #include "sheepImage.h" 5 | 6 | //-------------------------------------------------------------- 7 | void ofApp::setup(){ 8 | 9 | setting.width = 512; 10 | setting.height = 512; 11 | 12 | original.allocate(setting); 13 | 14 | //ksmrFX setup 15 | fx.setup(&original, setting); 16 | 17 | 18 | //make image for sample 19 | stringstream ss; 20 | ss << sheepImage1 << sheepImage2 << sheepImage3 << sheepImage4 << sheepImage5 << sheepImage6; 21 | Poco::Base64Decoder b64in(ss); 22 | 23 | ofBuffer buffer; 24 | b64in >> buffer; 25 | 26 | image.loadImage(buffer); 27 | } 28 | 29 | //-------------------------------------------------------------- 30 | void ofApp::update(){ 31 | 32 | //fx switch with key bind 33 | fx.getfxUnit(KSMR_FRAGFX_NOISE)->bEnable = ofGetKeyPressed('1'); 34 | fx.getfxUnit(KSMR_FRAGFX_EDGEONTOP)->bEnable = ofGetKeyPressed('2'); 35 | fx.getfxUnit(KSMR_FRAGFX_FRINGE)->bEnable = ofGetKeyPressed('3'); 36 | fx.getfxUnit(KSMR_FRAGFX_INVERT)->bEnable = ofGetKeyPressed('4'); 37 | fx.getfxUnit(KSMR_FRAGFX_SLANTSHIFT)->bEnable = ofGetKeyPressed('5'); 38 | fx.getfxUnit(KSMR_FRAGFX_TEXCHIP)->bEnable = ofGetKeyPressed('6'); 39 | fx.getfxUnit(KSMR_FRAGFX_VERTNOISE)->bEnable = ofGetKeyPressed('7'); 40 | fx.getfxUnit(KSMR_FRAGFX_VERTSLIDE)->bEnable = ofGetKeyPressed('8'); 41 | 42 | //change uniform parameter 43 | fx.getfxUnit(KSMR_FRAGFX_VERTSLIDE)->u_Volume = ofNoise(ofGetElapsedTimef())*5000.0; 44 | } 45 | 46 | //-------------------------------------------------------------- 47 | void ofApp::draw(){ 48 | 49 | //draw src buffer 50 | original.begin();{ 51 | ofClear(0, 0, 0, 255); 52 | 53 | ofSetColor(255); 54 | image.draw(0, 0); 55 | }original.end(); 56 | 57 | 58 | ofSetColor(255); 59 | //draw original buffer 60 | original.draw(0, 0); 61 | 62 | //apply active Effects 63 | fx.applyFx(); 64 | 65 | //draw applied buffer 66 | original.draw(512, 0); 67 | 68 | } 69 | 70 | //-------------------------------------------------------------- 71 | void ofApp::keyPressed(int key){ 72 | 73 | } 74 | 75 | //-------------------------------------------------------------- 76 | void ofApp::keyReleased(int key){ 77 | 78 | } 79 | 80 | //-------------------------------------------------------------- 81 | void ofApp::mouseMoved(int x, int y ){ 82 | 83 | } 84 | 85 | //-------------------------------------------------------------- 86 | void ofApp::mouseDragged(int x, int y, int button){ 87 | 88 | } 89 | 90 | //-------------------------------------------------------------- 91 | void ofApp::mousePressed(int x, int y, int button){ 92 | 93 | } 94 | 95 | //-------------------------------------------------------------- 96 | void ofApp::mouseReleased(int x, int y, int button){ 97 | 98 | } 99 | 100 | //-------------------------------------------------------------- 101 | void ofApp::windowResized(int w, int h){ 102 | 103 | } 104 | 105 | //-------------------------------------------------------------- 106 | void ofApp::gotMessage(ofMessage msg){ 107 | 108 | } 109 | 110 | //-------------------------------------------------------------- 111 | void ofApp::dragEvent(ofDragInfo dragInfo){ 112 | 113 | } 114 | -------------------------------------------------------------------------------- /src/FragFXUnits_SlantShift.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_SlantShift.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_SlantShift_h 10 | #define no_1_fxGenerator_FragFXUnits_SlantShift_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_SlantShift : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "SlantShift"; 19 | u_Volume = 1.0; 20 | 21 | source = STRINGIFY( 22 | uniform float Volume; 23 | uniform float Phase; 24 | uniform sampler2DRect tex0; 25 | 26 | const int oct = 8; 27 | const float per = 0.5; 28 | const float PI = 3.1415926; 29 | const float cCorners = 1.0 / 16.0; 30 | const float cSides = 1.0 / 8.0; 31 | const float cCenter = 1.0 / 4.0; 32 | 33 | // 補間関数 34 | float interpolate(float a, float b, float x){ 35 | float f = (1.0 - cos(x * PI)) * 0.5; 36 | return a * (1.0 - f) + b * f; 37 | } 38 | 39 | // 乱数生成 40 | float rnd(vec2 p){ 41 | return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453); 42 | } 43 | 44 | // 補間乱数 45 | float irnd(vec2 p){ 46 | vec2 i = floor(p); 47 | vec2 f = fract(p); 48 | vec4 v = vec4(rnd(vec2(i.x, i.y )), 49 | rnd(vec2(i.x + 1.0, i.y )), 50 | rnd(vec2(i.x, i.y + 1.0)), 51 | rnd(vec2(i.x + 1.0, i.y + 1.0))); 52 | return interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y); 53 | } 54 | 55 | // ノイズ生成 56 | float noise(vec2 p){ 57 | float t = 0.0; 58 | for(int i = 0; i < oct; i++){ 59 | float freq = pow(2.0, float(i)); 60 | float amp = pow(per, float(oct - i)); 61 | t += irnd(vec2(p.x / freq, p.y / freq)) * amp; 62 | } 63 | return t; 64 | } 65 | 66 | // シームレスノイズ生成 67 | float snoise(vec2 p, vec2 q, vec2 r){ 68 | return noise(vec2(p.x, p.y )) * q.x * q.y + 69 | noise(vec2(p.x, p.y + r.y)) * q.x * (1.0 - q.y) + 70 | noise(vec2(p.x + r.x, p.y )) * (1.0 - q.x) * q.y + 71 | noise(vec2(p.x + r.x, p.y + r.y)) * (1.0 - q.x) * (1.0 - q.y); 72 | } 73 | 74 | void main(void){ 75 | vec2 st = gl_TexCoord[0].st; 76 | vec2 t = vec2(st.y+st.x,Phase*100.0); 77 | float ns = noise(t)*Volume*300.0; 78 | 79 | vec3 col; 80 | 81 | if (ns > 150.0){ 82 | float shift = 30.0; 83 | col.r = texture2DRect(tex0, vec2(st.x-shift,st.y-shift)).r; 84 | col.b = texture2DRect(tex0, vec2(st.x-shift,st.y-shift)).b; 85 | col.g = texture2DRect(tex0, vec2(st.x-shift,st.y-shift)).g; 86 | }else{ 87 | col.r = texture2DRect(tex0, vec2(st.x,st.y)).r; 88 | col.b = texture2DRect(tex0, vec2(st.x,st.y)).b; 89 | col.g = texture2DRect(tex0, vec2(st.x,st.y)).g; 90 | } 91 | 92 | gl_FragColor = vec4(col,1.0); 93 | } 94 | 95 | ); 96 | } 97 | 98 | }; 99 | 100 | #endif 101 | -------------------------------------------------------------------------------- /src/FragFXUnits_TexChip.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_TexChip.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/06. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_TexChip_h 10 | #define no_1_fxGenerator_FragFXUnits_TexChip_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_TexChip : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "Tex Chip"; 19 | 20 | u_Volume = 1.0; 21 | 22 | source = STRINGIFY( 23 | uniform float Volume; 24 | uniform float Phase; 25 | uniform sampler2DRect tex0; 26 | 27 | const int oct = 8; 28 | const float per = 0.5; 29 | const float PI = 3.1415926; 30 | const float cCorners = 1.0 / 16.0; 31 | const float cSides = 1.0 / 8.0; 32 | const float cCenter = 1.0 / 4.0; 33 | 34 | // 補間関数 35 | float interpolate(float a, float b, float x){ 36 | float f = (1.0 - cos(x * PI)) * 0.5; 37 | return a * (1.0 - f) + b * f; 38 | } 39 | 40 | // 乱数生成 41 | float rnd(vec2 p){ 42 | return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453); 43 | } 44 | 45 | // 補間乱数 46 | float irnd(vec2 p){ 47 | vec2 i = floor(p); 48 | vec2 f = fract(p); 49 | vec4 v = vec4(rnd(vec2(i.x, i.y )), 50 | rnd(vec2(i.x + 1.0, i.y )), 51 | rnd(vec2(i.x, i.y + 1.0)), 52 | rnd(vec2(i.x + 1.0, i.y + 1.0))); 53 | return interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y); 54 | } 55 | 56 | // ノイズ生成 57 | float noise(vec2 p){ 58 | float t = 0.0; 59 | for(int i = 0; i < oct; i++){ 60 | float freq = pow(2.0, float(i)); 61 | float amp = pow(per, float(oct - i)); 62 | t += irnd(vec2(p.x / freq, p.y / freq)) * amp; 63 | } 64 | return t; 65 | } 66 | 67 | // シームレスノイズ生成 68 | float snoise(vec2 p, vec2 q, vec2 r){ 69 | return noise(vec2(p.x, p.y )) * q.x * q.y + 70 | noise(vec2(p.x, p.y + r.y)) * q.x * (1.0 - q.y) + 71 | noise(vec2(p.x + r.x, p.y )) * (1.0 - q.x) * q.y + 72 | noise(vec2(p.x + r.x, p.y + r.y)) * (1.0 - q.x) * (1.0 - q.y); 73 | } 74 | 75 | void main(void){ 76 | vec2 st = gl_TexCoord[0].st; 77 | vec2 t = vec2(floor(st.y/ 10.0)* 10.0+floor(Phase*15.0)*1200.0, 78 | floor(st.x/400.0)*200.0+floor(Phase*15.0)*1200.0); 79 | float ns = noise(t)*Volume*300.0; 80 | 81 | vec3 col; 82 | 83 | if (ns < 70.0){ 84 | float shift = 30.0; 85 | col.r = texture2DRect(tex0, vec2(st.x-shift,st.y)).r; 86 | col.b = texture2DRect(tex0, vec2(st.x-shift,st.y)).b; 87 | col.g = texture2DRect(tex0, vec2(st.x-shift,st.y)).g; 88 | }else{ 89 | col.r = texture2DRect(tex0, vec2(st.x,st.y)).r; 90 | col.b = texture2DRect(tex0, vec2(st.x,st.y)).b; 91 | col.g = texture2DRect(tex0, vec2(st.x,st.y)).g; 92 | } 93 | 94 | gl_FragColor = vec4(col,1.0); 95 | } 96 | 97 | ); 98 | } 99 | 100 | }; 101 | 102 | #endif 103 | -------------------------------------------------------------------------------- /src/FragFXUnits_noise.h: -------------------------------------------------------------------------------- 1 | // 2 | // FragFXUnits_noise.h 3 | // no_1_fxGenerator 4 | // 5 | // Created by Ovis aries on 2014/12/07. 6 | // 7 | // 8 | 9 | #ifndef no_1_fxGenerator_FragFXUnits_noise_h 10 | #define no_1_fxGenerator_FragFXUnits_noise_h 11 | 12 | #include "ofxKsmrFragFXUnit.h" 13 | 14 | class FragFXUnits_Noise : public ofxKsmrFragFXUnit{ 15 | 16 | public: 17 | virtual void setup(){ 18 | Name = "Noise"; 19 | u_Volume = 0.5; 20 | 21 | source = STRINGIFY( 22 | uniform float Volume; 23 | uniform float Phase; 24 | uniform sampler2DRect tex0; 25 | 26 | vec3 mod289(vec3 x) { 27 | return x - floor(x * (1.0 / 289.0)) * 289.0; 28 | } 29 | 30 | vec2 mod289(vec2 x) { 31 | return x - floor(x * (1.0 / 289.0)) * 289.0; 32 | } 33 | 34 | vec3 permute(vec3 x) { 35 | return mod289(((x*34.0)+1.0)*x); 36 | } 37 | 38 | float snoise(vec2 v) 39 | { 40 | const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0 41 | 0.366025403784439, // 0.5*(sqrt(3.0)-1.0) 42 | -0.577350269189626, // -1.0 + 2.0 * C.x 43 | 0.024390243902439); // 1.0 / 41.0 44 | // First corner 45 | vec2 i = floor(v + dot(v, C.yy) ); 46 | vec2 x0 = v - i + dot(i, C.xx); 47 | 48 | // Other corners 49 | vec2 i1; 50 | //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 51 | //i1.y = 1.0 - i1.x; 52 | i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); 53 | // x0 = x0 - 0.0 + 0.0 * C.xx ; 54 | // x1 = x0 - i1 + 1.0 * C.xx ; 55 | // x2 = x0 - 1.0 + 2.0 * C.xx ; 56 | vec4 x12 = x0.xyxy + C.xxzz; 57 | x12.xy -= i1; 58 | 59 | // Permutations 60 | i = mod289(i); // Avoid truncation effects in permutation 61 | vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) 62 | + i.x + vec3(0.0, i1.x, 1.0 )); 63 | 64 | vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0); 65 | m = m*m ; 66 | m = m*m ; 67 | 68 | // Gradients: 41 points uniformly over a line, mapped onto a diamond. 69 | // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) 70 | 71 | vec3 x = 2.0 * fract(p * C.www) - 1.0; 72 | vec3 h = abs(x) - 0.5; 73 | vec3 ox = floor(x + 0.5); 74 | vec3 a0 = x - ox; 75 | 76 | // Normalise gradients implicitly by scaling m 77 | // Approximation of: m *= inversesqrt( a0*a0 + h*h ); 78 | m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); 79 | 80 | // Compute final noise value at P 81 | vec3 g; 82 | g.x = a0.x * x0.x + h.x * x0.y; 83 | g.yz = a0.yz * x12.xz + h.yz * x12.yw; 84 | return 130.0 * dot(m, g); 85 | } 86 | 87 | void main(void){ 88 | vec2 st = gl_TexCoord[0].st; 89 | vec3 col; 90 | 91 | col.r = texture2DRect(tex0, vec2(st.x,st.y)).r; 92 | col.b = texture2DRect(tex0, vec2(st.x,st.y)).b; 93 | col.g = texture2DRect(tex0, vec2(st.x,st.y)).g; 94 | 95 | col.rgb += snoise(vec2(st.x*st.y+Phase*231.5 , 96 | st.x+st.y-Phase*324.1))*Volume; 97 | 98 | gl_FragColor = vec4(col,1.0); 99 | } 100 | 101 | ); 102 | } 103 | }; 104 | 105 | #endif 106 | -------------------------------------------------------------------------------- /example/sheepImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // sheepImage.h 3 | // ofxKsmrFragmentFxExample 4 | // 5 | // Created by Ovis aries on 2015/03/23. 6 | // 7 | // 8 | 9 | #ifndef ofxKsmrFragmentFxExample_sheepImage_h 10 | #define ofxKsmrFragmentFxExample_sheepImage_h 11 | 12 | #include 13 | 14 | string sheepImage1 = "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"; 15 | string sheepImage2 = "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ox6VDNYqysKKWkAp1BQUUUtIApcUYpaACjFApaADvS0gpaB3ClFGKWgLhiilooGFGKKWgDnMUUtGKs5RKWiloAKKKKAClpKWgAooopAFFFNZN3tQMqaxfx6fZPKSC2MIM9T2rlND3SRTTSctJJknPPT/HNdLe6NFdoQ5PPOCelQ2OhC2t1j8wMFJ5x15NNCZBbztBMHXjHBFb0MqzIHj6MM1Vj02JPf61ajiEfypwO9DBEtFJSikMWiilFABiilooGGKMUtFABRRS0AGKKWigBaKKKAFFFFAoAUUUUtABQSBnJxjr7UorlfHGrGzsxaQk+bN1x1C0A3Y1dK1qHULmaOP5VDYiOeJAOP51rLXmujs8NrbvGcMqlhj6mvQNNu1vbUOpG4cMKbRMZ3LfHpRQKKk0FpaKKYBS0lLQMBTqQUUBcdRiigUALRRRSAWiiikO4tKKQUtA7hS0UUALRRRQAtLSUUDHUUUUAHaj/9VFc/4x14aHpxERH2uUbYx6H1p2E3ZXP/2YrI8Ta1HoemvM2GnbiND3anYTdlcqmg0UVRzgKXvRRQMWgUUUAFLRRQAlL2oooABS0UUAApVoooBid6O9FFJghRS0UUDClFFFAC0CiigYtAoooAWiiigBwooooAWiiigApaKKAEpaKKAHL1H1rzv4if8hWH/rnRRTRMtiLTf+POD/crrvCf/HrL/vmiimzKnubopRRRUHQLSiiimMKXtRRQACnUUUAFKKKKAE707tRRSGA6fjS0UUgD1pe6/SiigaF/iNFFFAxRRRRQAUpoooGLS0UUANavO/iz/wAfdl9D/OiiriRU2P/ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI"; 16 | string sheepImage3 = "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAHaAdkDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAH"; 17 | string sheepImage4 = "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"; 18 | string sheepImage5 = "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"; 19 | string sheepImage6 = "tpdtOpdtAEeyl21IBigDFADNtG2ngYpQKAIwlLt9qlo20BcYFoCVIVpQtAXItlKEqTbTgtAEPl0BKm20u2gdyHy6XZU1LtoC5AEpfLqfbShaAuV/LpRDU4Sl20DuV/JpklhFJ95N9XPLpdtA1KxyeofDXQtUuIriW0aKWN1cSQttOQcjPqM1pR+FdPj/5ZM/8A10Yt+lbYGKdtoFo3dlGHTYreP90ion+yuP5VN5NWVWl2UFqTK6xU/wAup1WjZQPmuReTS7Kn205VoGmQrHThFUoSnbKCrkWynBKkCU7bQFyMR0qpUm2nBaRVxgSl21IBSgUh3Gqlcp438fW/g+80y02faLu8lJ8nusSjLt14PGB/9auj1jVrTw/pdxqF7L5NpaoZJG9gOg9z0Hua+WF8TXfjTx5Lqt38jyb/AC493EUYBCoPUAH8zVwipOzOetUdOOh9XWlzFeW8VxbvvikUOjeoPSplWvMPhl4p+x3H9lXb/wCjzNmBm/hkPUdeh/n9a9TqZRcXZl0aqqQuhNhpwWlXpTttSb3EC0u2nL1p1BVxoWnU+igdxAtLTgKVetILiUqinJSrRYYKKXaKWnUgGgU8DNIBTwKQBSbaWigZ5uBTttKRSg1vY8i4lLtoWngUWC4zbS7KcBS0WC4m2gClp20UrFXGbadtpdopaAuN204CimzzpZ28ssrqkUal3ZugUDJJ/CgLmTrHiKLS9QtLR/naZTI691jBAz9cn9DWwjJJGjp86NyG9QeleOaPrL+JNY1jVX+5I6wwq38MagkD64I/Ou88K6z5cn2KV/kb/Vt6H0+lW46Ec2p1O2nBaQGnVBqIFoApy0LQAlKBS7RTgKAG7RS7aXbTgM0AIBSgZpQKUCgBNtG2nBadQA3bTiKdRQO4m2lVafRQNMRacFp1AFBVxAtLtp1QveW8d5FaPKv2iZGdI93zMq4yQPTkUBcmVacFoWnbaCriKtOAxRtFOAoC43bQUengU5qCrnNeK/BsXjDS3sr2WT7OzA7VbHI5B9zmvNrL9nm70vWPtFpqsMtpsYFZlIkXPpgENx9K9vpy007Gc4RqKzOB074R2lv893dzXDrztj/djrnsc13UcLx/5z+tT80UndjpxjTVkNqRRQBTttSbcwlOXpSKKdSHcKdRSgZoAUClpFpQKChVpdooXpTgKAuAFOXrSUq0DTHUUUq0FXHUU0Gk8z60gueeUu00rUjda2PHuANOpFpY6BhRStTqAGrS7RSrRQAmRRkU5aSgZGzP/B/n8q5Lxtpuu65o9xZW/lpFIuDt6kA5wc9q7OnLQVc8l8IeE9V0/R0ilspIpWd2fcuOckDnvwBXSQeFLuT/AFrrF/u5Jrtk60LVX0Mrala0WWONElbe6r8zevvVjJpVpy1magtOoooAdRRRQNDlFLRRQUFOAxS0UAFOAoX/AAooAXJpQtLRQAU5RSLStQAtLtpq9KVKAGXd1Fp9vLcXDrFbwoZJJG6BQMkn8K+fbXxrd+KPFmoa8jtF5bxpaL/zyjG4ge5Ocn6ntXpnxvdo/hvfbGK7pY1O04yN/Q14l4F/487v/rqv8q0iupy1pNWR9MeG9di8QaWl3F9/pJH/AHWHUf59a1AK8x+FMr/23qEe9tn2dW254zuPOK9OWokrM6KcnKN2Op1ItLSNQpwFKvaigYbfanAYpGp60DBadk0lKtADqKRqctIsVaUGkX+P/Pen0gEWnL1po7/57U5f9Yn+7/U0hocDSg0kdFAx9AFFFAxd1OWmrQtAySikWhqBkN9f2+l2dxe3cq29pbo0kkjcBVAySa8i/wCGrPC3/PlqP/ftf8auftOTSQ/DJVSRkWS8iRwpIDLhzg+oyAfwFfKVbRimrnBiK06ckon/2Q=="; 20 | 21 | #endif 22 | --------------------------------------------------------------------------------