--------------------------------------------------------------------------------------------------------------- INITIALIZING VIDBOT, v1.7.1... --------------------------------------------------------------------------------------------------------------- [11:50:08.903] Vidbot :: start() [11:50:08.903] Vidbot :: _next(), _stepIndex:0 of 4 [11:50:08.904] index :: _onStepStarted_vidbot(), step: 1 [11:50:08.905] Vidbot :: step[0], label:Initializing Core [11:50:08.914] index :: _onStepProgress_vidbot(), percent: 20 [11:50:08.915] Vidbot :: _parse() [11:50:08.916] index :: _onStepProgress_vidbot(), percent: 40 [11:50:08.916] Vidbot :: _validate() [11:50:08.917] index :: _onStepProgress_vidbot(), percent: 60 [11:50:08.917] Vidbot :: _fonts() [11:50:08.918] FabricFontManager :: add(), id: SourceSansPro-Bold [11:50:08.918] src: /var/app/Vidbot-V2/assets/fonts/SourceSansPro/SourceSansPro-Bold.ttf [11:50:08.926] FabricFontManager :: add(), id: SourceSansPro-Light [11:50:08.926] src: /var/app/Vidbot-V2/assets/fonts/SourceSansPro/SourceSansPro-Light.ttf [11:50:08.927] FabricFontManager :: add(), id: DINOT-Bold [11:50:08.927] src: /var/app/Vidbot-V2/assets/fonts/DINOT/DINOT-Bold.otf [11:50:08.928] FabricFontManager :: add(), id: DINOT-Light [11:50:08.928] src: /var/app/Vidbot-V2/assets/fonts/DINOT/DINOT-Light.otf [11:50:08.929] FabricFontManager :: add(), id: TradeGothicLTStd-Regular [11:50:08.929] src: /var/app/Vidbot-V2/assets/fonts/TradeGothicCond/TradeGothicLTStd-Regular.otf [11:50:08.930] FabricFontManager :: add(), id: TradeGothicLTStd-Bold [11:50:08.930] src: /var/app/Vidbot-V2/assets/fonts/TradeGothicCond/TradeGothicLTStd-Bold.otf [11:50:08.931] index :: _onStepProgress_vidbot(), percent: 80 [11:50:08.931] Vidbot :: _clips() [11:50:08.932] StreamManager :: add(), id:audio_vo, type:audio [11:50:08.932] AudioClip[audio_vo] :: constructor() [11:50:08.933] InputStream[audio_vo] :: constructor() [11:50:08.933] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'audio_vo', clipId: null } [11:50:08.936] StreamManager :: add(), id:bg_music, type:audio [11:50:08.936] AudioClip[bg_music] :: constructor() [11:50:08.936] InputStream[bg_music] :: constructor() [11:50:08.936] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'bg_music', clipId: null } [11:50:08.936] StreamManager :: add(), id:mira, type:canvas [11:50:08.937] CanvasStream[canvas_289682037796] :: constructor() [11:50:08.937] InputStream[canvas_289682037796] :: constructor() [11:50:09.017] MiraSlideshow[mira] :: constructor() [11:50:09.018] Mira[mira] :: constructor() [11:50:09.018] Overlay[mira] :: constructor() [11:50:09.018] CanvasClip[mira] :: constructor() [11:50:09.018] Clip[mira] :: constructor() [11:50:09.018] clip:"mira" added to stream:"canvas_289682037796" [11:50:09.018] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'canvas_289682037796', clipId: 'mira' } [11:50:09.018] all added... [11:50:09.019] Vidbot :: _next(), _stepIndex:1 of 4 [11:50:09.019] index :: _onStepCompleted_vidbot(), step: 1 [11:50:09.019] index :: _onStepStarted_vidbot(), step: 2 [11:50:09.019] Vidbot :: step[1], label:Initializing Input Streams [11:50:09.020] StreamManager :: init() [11:50:09.020] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'audio_vo', progress: 0.3333333333333333 } [11:50:09.020] index :: _onStepProgress_vidbot(), percent: 33 [11:50:09.020] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'bg_music', progress: 0.6666666666666666 } [11:50:09.021] index :: _onStepProgress_vidbot(), percent: 67 [11:50:09.021] CanvasStream[canvas_289682037796] :: _init(), BEGIN [11:50:09.021] i:0, c.id:mira [11:50:09.022] MiraSlideshow[mira] :: _init(), BEGIN [11:50:09.022] MiraSlideshow[mira] :: _validate() [11:50:09.024] MiraSlideshow :: _validateSlides() [11:50:09.024] i:0, s.type: title [11:50:09.024] i:1, s.type: info [11:50:09.024] i:2, s.type: image [11:50:09.024] i:3, s.type: image [11:50:09.024] i:4, s.type: image [11:50:09.025] i:5, s.type: image [11:50:09.025] i:6, s.type: image [11:50:09.025] i:7, s.type: image [11:50:09.025] i:8, s.type: image [11:50:09.025] i:9, s.type: image [11:50:09.025] i:10, s.type: image [11:50:09.025] i:11, s.type: image [11:50:09.025] i:12, s.type: image [11:50:09.025] i:13, s.type: image [11:50:09.025] i:14, s.type: image [11:50:09.025] i:15, s.type: image [11:50:09.025] i:16, s.type: image [11:50:09.029] MiraSlideshow[mira] :: _build(), BEGIN [11:50:09.034] MiraTitlecard[titlecard] :: constructor() [11:50:09.034] Mira[titlecard] :: constructor() [11:50:09.034] Overlay[titlecard] :: constructor() [11:50:09.034] CanvasClip[titlecard] :: constructor() [11:50:09.034] Clip[titlecard] :: constructor() [11:50:09.035] MiraTitlecard[titlecard] :: _init() [11:50:09.035] MiraTitlecard[titlecard] :: _validate() [11:50:09.036] MiraTitlecard[titlecard] :: _build() [11:50:09.064] Overlay[titlecard] :: _animate() [11:50:09.066] MiraTitlecard[titlecard] :: _animate() [11:50:09.068] AnimatedImageFrame[aiftitle] :: constructor() [11:50:09.069] AnimatedImageFrame[aiftitle] :: _init(), BEGIN [11:50:09.069] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_1.jpg [11:50:09.124] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.128] AnimatedImageFrame[aiftitle] :: _init(), END [11:50:09.133] MiraInfosheet[info] :: constructor() [11:50:09.133] Mira[info] :: constructor() [11:50:09.133] Overlay[info] :: constructor() [11:50:09.133] CanvasClip[info] :: constructor() [11:50:09.133] Clip[info] :: constructor() [11:50:09.134] MiraInfosheet[info] :: _init() [11:50:09.134] MiraInfosheet[info] :: _validate() [11:50:09.135] MiraInfosheet[info] :: _build() [11:50:09.149] RenOptions[info] :: _animate() [11:50:09.149] Overlay[info] :: _animate() [11:50:09.151] AnimatedImageFrame[info1] :: constructor() [11:50:09.151] AnimatedImageFrame[info2] :: constructor() [11:50:09.151] AnimatedImageFrame[info3] :: constructor() [11:50:09.151] AnimatedImageFrame[info1] :: _init(), BEGIN [11:50:09.151] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_1.jpg [11:50:09.190] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.192] AnimatedImageFrame[info1] :: _init(), END [11:50:09.192] AnimatedImageFrame[info2] :: _init(), BEGIN [11:50:09.192] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_7.jpg [11:50:09.225] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.226] AnimatedImageFrame[info2] :: _init(), END [11:50:09.226] AnimatedImageFrame[info3] :: _init(), BEGIN [11:50:09.226] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_10.jpg [11:50:09.266] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.267] AnimatedImageFrame[info3] :: _init(), END [11:50:09.268] AnimatedImageFrame[image] :: constructor() [11:50:09.268] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.268] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_1.jpg [11:50:09.310] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.311] AnimatedImageFrame[image] :: _init(), END [11:50:09.312] AnimatedImageFrame[image] :: constructor() [11:50:09.312] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.312] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_2.jpg [11:50:09.348] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.349] AnimatedImageFrame[image] :: _init(), END [11:50:09.350] AnimatedImageFrame[image] :: constructor() [11:50:09.350] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.350] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_3.jpg [11:50:09.402] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.403] AnimatedImageFrame[image] :: _init(), END [11:50:09.404] AnimatedImageFrame[image] :: constructor() [11:50:09.404] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.404] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_4.jpg [11:50:09.438] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.439] AnimatedImageFrame[image] :: _init(), END [11:50:09.440] AnimatedImageFrame[image] :: constructor() [11:50:09.440] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.440] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_5.jpg [11:50:09.482] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.484] AnimatedImageFrame[image] :: _init(), END [11:50:09.484] AnimatedImageFrame[image] :: constructor() [11:50:09.484] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.484] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_6.jpg [11:50:09.517] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.518] AnimatedImageFrame[image] :: _init(), END [11:50:09.518] AnimatedImageFrame[image] :: constructor() [11:50:09.518] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.518] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_7.jpg [11:50:09.549] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.550] AnimatedImageFrame[image] :: _init(), END [11:50:09.551] AnimatedImageFrame[image] :: constructor() [11:50:09.551] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.551] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_8.jpg [11:50:09.583] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.584] AnimatedImageFrame[image] :: _init(), END [11:50:09.585] AnimatedImageFrame[image] :: constructor() [11:50:09.585] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.585] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_9.jpg [11:50:09.619] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.620] AnimatedImageFrame[image] :: _init(), END [11:50:09.621] AnimatedImageFrame[image] :: constructor() [11:50:09.621] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.621] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_10.jpg [11:50:09.653] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.655] AnimatedImageFrame[image] :: _init(), END [11:50:09.655] AnimatedImageFrame[image] :: constructor() [11:50:09.655] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.655] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_11.jpg [11:50:09.695] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.696] AnimatedImageFrame[image] :: _init(), END [11:50:09.697] AnimatedImageFrame[image] :: constructor() [11:50:09.697] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.697] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_12.jpg [11:50:09.746] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.747] AnimatedImageFrame[image] :: _init(), END [11:50:09.748] AnimatedImageFrame[image] :: constructor() [11:50:09.748] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.748] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_13.jpg [11:50:09.782] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.783] AnimatedImageFrame[image] :: _init(), END [11:50:09.783] AnimatedImageFrame[image] :: constructor() [11:50:09.783] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.783] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_14.jpg [11:50:09.813] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.814] AnimatedImageFrame[image] :: _init(), END [11:50:09.814] AnimatedImageFrame[image] :: constructor() [11:50:09.815] AnimatedImageFrame[image] :: _init(), BEGIN [11:50:09.815] CanvasClip :: LoadImageWithPromise(), src: 1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70_15.jpg [11:50:09.848] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [11:50:09.849] AnimatedImageFrame[image] :: _init(), END [11:50:09.849] MiraSlideshow[mira] :: _build(), END [11:50:09.850] Overlay[mira] :: _animate() [11:50:09.850] MiraSlideshow[mira] :: _init(), END [11:50:09.850] CanvasStream[mira] :: _init(), p.then() [11:50:09.851] CanvasStream[canvas_289682037796] :: _init(), promise.all.then() [11:50:09.852] CanvasStream[canvas_289682037796] :: _init(), END [11:50:09.852] StreamMangaer :: init(), stream[canvas_289682037796].then() [11:50:09.853] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'canvas_289682037796', progress: 1 } [11:50:09.853] index :: _onStepProgress_vidbot(), percent: 100 [11:50:09.853] StreamManager :: init(), promise.all.then... [11:50:09.853] Vidbot :: StreamMgr.on( 'INITED' ) [11:50:09.853] Vidbot :: _next(), _stepIndex:2 of 4 [11:50:09.853] index :: _onStepCompleted_vidbot(), step: 2 [11:50:09.854] index :: _onStepStarted_vidbot(), step: 3 [11:50:09.854] Vidbot :: step[2], label:Rendering Canvas Streams [11:50:09.854] Vidbot :: StreamMgr.on( 'RENDER_STARTED' ), data: undefined [11:50:09.854] StreamManager :: render() [11:50:09.855] CanvasStream[canvas_289682037796] :: render() [11:50:09.918] index :: _onStepProgress_vidbot(), percent: 0 [11:50:45.451] index :: _onStepProgress_vidbot(), percent: 5 [11:51:12.034] index :: _onStepProgress_vidbot(), percent: 10 [11:51:51.658] index :: _onStepProgress_vidbot(), percent: 15 [11:52:33.752] index :: _onStepProgress_vidbot(), percent: 20 [11:53:14.905] index :: _onStepProgress_vidbot(), percent: 25 [11:53:56.344] index :: _onStepProgress_vidbot(), percent: 30 [11:54:39.733] index :: _onStepProgress_vidbot(), percent: 35 [11:55:26.240] index :: _onStepProgress_vidbot(), percent: 40 [11:56:12.827] index :: _onStepProgress_vidbot(), percent: 45 [11:56:56.959] index :: _onStepProgress_vidbot(), percent: 50 [11:57:36.175] index :: _onStepProgress_vidbot(), percent: 55 [11:58:11.179] index :: _onStepProgress_vidbot(), percent: 60 [11:58:47.174] index :: _onStepProgress_vidbot(), percent: 65 [11:59:32.211] index :: _onStepProgress_vidbot(), percent: 70 [12:00:21.517] index :: _onStepProgress_vidbot(), percent: 75 [12:01:04.966] index :: _onStepProgress_vidbot(), percent: 80 [12:01:45.444] index :: _onStepProgress_vidbot(), percent: 85 [12:02:24.555] index :: _onStepProgress_vidbot(), percent: 90 [12:03:05.947] index :: _onStepProgress_vidbot(), percent: 95 [12:03:42.222] index :: _onStepProgress_vidbot(), percent: 100 [12:03:45.882] StreamManager :: render(), Promise.all.then... [12:03:45.882] Vidbot :: StreamMgr.on( 'RENDER_COMPLETED' ), data: undefined [12:03:45.883] Vidbot :: _next(), _stepIndex:3 of 4 [12:03:45.883] index :: _onStepCompleted_vidbot(), step: 3 [12:03:45.883] index :: _onStepStarted_vidbot(), step: 4 [12:03:45.884] Vidbot :: step[3], label:Encoding Media [12:03:45.887] CanvasFilters :: Overlay() [12:03:45.887] AudioStream[audio_vo] :: inputOptions() [12:03:45.888] AudioFilters :: Volume() [12:03:45.888] filter: [2:a]volume=1[2_vol] [12:03:45.888] AudioFilters :: Delay() [12:03:45.888] filter: [2_vol]adelay=0|0[2_del] [12:03:45.888] AudioStream[bg_music] :: inputOptions() [12:03:45.888] AudioFilters :: Volume() [12:03:45.888] filter: [3:a]volume=0.15[3_vol] [12:03:45.888] AudioFilters :: FadeOut() [12:03:45.888] filter: [3_vol]afade=t=out:st=60:d=1[3_fadeout] [12:03:45.889] AudioFilters :: Delay() [12:03:45.889] filter: [3_fadeout]adelay=0|0[3_del] [12:03:45.889] AudioFilters :: Mix() [12:03:45.889] filter: [2_del][3_del]amix=inputs=2:duration=longest[a_out] [12:03:45.889] mixed filter: [2_del][3_del]amix=inputs=2:duration=longest[a_out] [12:03:45.892] hang.time: 60 [12:03:46.025] Vidbot :: ffmpeg.on( 'start' ) [12:03:46.025] ffmpeg -f lavfi -i color=c=000000:s=960x540:r=30:duration=60 -r 30 -i ./tmp/canvas_289682037796_%05d.png -to 00:01:00.000 -i file:///var/www/html/clie [12:03:46.025] nts/22039/audio/1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70.mp3 -to 00:01:00.000 -i file:///var/app/video_pre_processor/assets/vidbot/_files/audio/RF12_Funky [12:03:46.025] _2.mp3 -y -filter_complex [0:v][1:v]overlay=x=0:y=0[1_out];[2:a]volume=1[2_vol];[2_vol]adelay=0|0[2_del];[3:a]volume=0.15[3_vol];[3_vol]afade=t=out:st [12:03:46.025] =60:d=1[3_fadeout];[3_fadeout]adelay=0|0[3_del];[2_del][3_del]amix=inputs=2:duration=longest[a_out] -acodec aac -vcodec libx264 -r 30 -f mp4 -map [a_o [12:03:46.025] ut] -map [1_out] -preset veryfast -crf 18 -movflags frag_keyframe+empty_moov -pix_fmt yuv420p /var/www/html/clients/22039/video/1F2C9E11-7F37-B6B8-DCD [12:03:46.025] C-4BD8A16A1B70.mp4 [12:03:46.287] index :: _onStepProgress_vidbot(), percent: -3462080762 [12:03:46.673] index :: _onStepProgress_vidbot(), percent: 1 [12:03:48.211] index :: _onStepProgress_vidbot(), percent: 5 [12:03:49.752] index :: _onStepProgress_vidbot(), percent: 10 [12:03:51.771] index :: _onStepProgress_vidbot(), percent: 16 [12:03:53.320] index :: _onStepProgress_vidbot(), percent: 20 [12:03:55.326] index :: _onStepProgress_vidbot(), percent: 26 [12:03:56.335] index :: _onStepProgress_vidbot(), percent: 30 [12:03:58.356] index :: _onStepProgress_vidbot(), percent: 36 [12:03:59.366] index :: _onStepProgress_vidbot(), percent: 40 [12:04:00.873] index :: _onStepProgress_vidbot(), percent: 46 [12:04:01.887] index :: _onStepProgress_vidbot(), percent: 50 [12:04:02.891] index :: _onStepProgress_vidbot(), percent: 55 [12:04:04.399] index :: _onStepProgress_vidbot(), percent: 61 [12:04:05.913] index :: _onStepProgress_vidbot(), percent: 66 [12:04:07.429] index :: _onStepProgress_vidbot(), percent: 71 [12:04:08.440] index :: _onStepProgress_vidbot(), percent: 75 [12:04:09.950] index :: _onStepProgress_vidbot(), percent: 80 [12:04:11.469] index :: _onStepProgress_vidbot(), percent: 86 [12:04:12.487] index :: _onStepProgress_vidbot(), percent: 91 [12:04:14.002] index :: _onStepProgress_vidbot(), percent: 96 [12:04:15.022] index :: _onStepProgress_vidbot(), percent: 100 [12:04:15.078] Vidbot :: ffmpeg.on( 'end' ), Done! [12:04:15.079] StreamManager :: dispose() [12:04:15.079] CanvasStream[canvas_289682037796] :: dispose() [12:04:15.084] Vidbot :: fflog.on( 'finish' ) [12:04:15.085] fflog.path: /var/www/html/clients/22039/video/1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70.mp4.fflog [12:04:15.085] Vidbot :: _next(), _stepIndex:4 of 4 [12:04:15.085] index :: _onStepCompleted_vidbot(), step: 4 [12:04:15.085] index :: _onComplete_vidbot(), data: { stepTime: 0, appTime: 846.202, output: '/var/www/html/clients/22039/video/1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70.mp4', duration: 60 } --------------------------------------------------------------------------------------------------------------- Output File : /var/app/video_pre_processor/jobs/postp//var/www/html/clients/22039/video/1F2C9E11-7F37-B6B8-DCDC-4BD8A16A1B70.mp4 Media Duration : 00:01:00.000 Generation Time : 00:14:06.201 ---------------------------------------------------------------------------------------------------------------