dp3/dp3.sh

939 lines
73 KiB
Bash
Executable File

#!/usr/bin/env bash ############################################################################# VERSION 2.1 ### SOF
echo -e '\033[0;31m'" .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::. "
echo -e '\033[0;31m'" /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd- "
echo -e '\033[0;31m'"-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN."
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmNMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh:NMMMMMMMMMMoyMMMMMMMMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm -NMMMMMMMMMs.NMMMMMMMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy -hmmmmmNNm- sMMMMMMMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmdyo+:. ......... .NMMMymMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy+-.. -hNm-+MMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMms:. ... /MMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/. /MMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMmhN:. /MMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMM+sNMMMMMMMMMN-h: .-+syyys/- -NMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMs +NMMMMMMMhm--d. :. -sdNMMMMMNNmy. :ydMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMM+ :yhyyyhhso. os yhshNMMMMMMMh+:-:. :s- .NMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMmho. . .yo.h:sMMMMMMMMMMNd+. -NNs- yMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMNh/. :++.-MMMMMMMMMMMMMm+. :ymds. -NMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMmo- .MMMMMMMMMMMMMMMdo. ..-. yMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMmo. .NMMMMMMMMMMMMMMMMNy/.. .mMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMNs. hMMMMMMMMMMMMMMMMMMMNho-. :NMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMm: ./syyyo- -hmNMMMMMMMMMMMMMMMMMMMMmho:.. /NMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMd. .smMMMNNNms. . .+MMMMMMMMMMMMMMMMMMMMMMMMNdy/ ..yMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMd. /mMMMMMy/:--. so. .mMMMMMMMMMMMMMMMMMMMMMMMNdo--:+sdNMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMN- /NMMMMMMMMdo. oMm+. /MMMMMMMMMMMMMMMMdNMMMMMMNNNMMmMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMo -NMMMMMMMMMMdso-. /hmm+ sMMMMMMMMMMMMMMMs-mMMMMMMMMMM:dMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMN. sMMMMMMMMMMMo .os/..... .dMMMMMMMMMMMMMMs -NMMMMMMMMM-:MMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMd mMMMMMMMMMMM/ .:os+-. .dMMMMMMMMMMMNm. -soosyhdms .mMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMs mMMMMMMMMMMM: .hNhs/.. .dMMMMNmhs+:-. +MMMNoMMMMMMMMMM-"
echo -e '\033[0;31m'"/MMy hMMMMMMMMMMM: oMMMMMNdyo/. .mNh+-. +mNy.mMMMMMMMMM-"
echo -e '\033[0;31m'"/MMd +MMMMMMMMMMM/ :MMMMMMMMNs...:ohh/. . mMMMMMMMMM-"
echo -e '\033[0;31m'"/MMN. .mMMMMMMMMMMo .NMMMMMMNhhdNMMh: mMMMMMMMMM-"
echo -e '\033[0;31m'"/MMM+ /MMMMMMMMMMh yMMMMMMMMMMMN+ .NMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMm. +MMMMMMMMMN. .NMMMMMMMMMN- :sdmNNNdy+. dMMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMo +MMMMMMMMM+ +MMMMMMMMM/ -dMMMMMMNmmNN/ .sdMMMMMMM-"
echo -e '\033[0;31m'"/MMMMN: :mMMMMMMMm. oMMMMMMMh .mMMMMMMMms- .. /o. .mMMMMMM-"
echo -e '\033[0;31m'"/MMMMMm. .yMMMMMMMo oMMMMMM/ sMMMMMMMMMMMh: :NNo. sMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMm. -hMMMMMN: /NMMMM. dMMMMMMMMMMMMMh- :hmNy. .NMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMm- -yNMMMm. .yMMM. dMMMMMMMMMMMMMMNh:. .... yMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMN+ .+hNMd. :hM: dMMMMMMMMMMMMMMMMNmo- .NMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMh- ./ss. .:: sMMMMMMMMMMMMMMMMMMMNms/. /MMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMNo. . :MMMMMMMMMMMMMMMMMMMMMMMNdo:.. oMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMmo. .mMMMMMMMMMMMMMMMMMMMMMMMMMMNmh: .dMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMNy:. +MMMMMMMMMMMMMMMMMMMMMMMMMMNh+::/+sdNMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMNdo- .dMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNMMMMMMMM-"
echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMNd+-. -NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-"
echo -e '\033[0;31m'"-NMMMMMMMMMMMMMMMMMMMMMMNdo:. /NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd."
echo -e '\033[0;31m'" -ymNNNNNNNNNNNNNNNNNNNNNNNNdo-. +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmy. "
echo -e '\033[0;31m'" ............................ .-................................ "
echo -e '\033[0;31m'" ...... ......... .............. .......... ...... "
#####################################################################################################################
DP3PWD="$PWD"
DP3RUN="$PWD/$0"
REDOWNLOAD_COUNT=0
REDOWNLOAD_LIMIT=3
PLAYLIST_URL=$3
PLAYLIST_NAME="$1"
PLAYLIST_GENRE="$2"
PLAYLIST_ARTWORK="_cover.png"
PLAYLIST_ARTWORK_PATH="$DP3PWD/$PLAYLIST_ARTWORK"
PLAYLIST_URLBATCH="_url_batch.log"
PLAYLIST_URLSTEXT="_playlist_urls.txt"
PREFIX="dr1p__"
THREADS=20
#####################################################################################################################
usage () {
echo -e "\n\t\033[0;31m INFO: \033[0;91m[\033[0m COMMAND LINE HELP \033[0;91m]\033[0m"
echo -e "\n\t\033[0;31m USAGE: \033[0;91m./$0 name_of_playlist genre_of_playlist url_of_playlist\033[0m"
echo -e "\t\033[0;31mEXAMPLE: \033[0;91m./$0 dr1pp1ng rap https://www.youtu.be/playlist?list=BLABLABLABLABLA\033[0m"
echo -e "\n\t\033[0;31m INFO: \033[0;91m[\033[0m MULTI-LINE HELP \033[0;91m]\033[0m"
echo -e "\n\033[0;31m USAGE_LINE_1:\033[0;91m first line: what to name this playlist, it's just a chosen name\033[0m"
echo -e "\033[0;31m USAGE_LINE_2: \033[0;91msecond line: genre of this playlist, can be anything you want \033[0m"
echo -e "\033[0;31m USAGE_LINE_3: \033[0;91mthird line and more: a url to a song, playlist, set or channel \033[0m\n"
echo -e "\t\033[0;31mEXAMPLE: \033[0;91m[\033[0m TRY THE SIX LINE BATCH BELOW IF YOU ARE UNSURE\033[0;91m ]\033[0m\n"
echo -e "\033[0;31m EXAMPLE_LINE_1: \033[0;91mdr1pp1ng_m1x3s\033[0m"
echo -e "\033[0;31m EXAMPLE_LINE_2: \033[0;91mindustrial\033[0m"
echo -e "\033[0;31m EXAMPLE_LINE_3: \033[0;91mwww.youtube.com/playlist?list=PLrdcKN79B4UG1xoQ8-L3eiaI1cYzFCiWD\033[0m"
echo -e "\033[0;31m EXAMPLE_LINE_4: \033[0;91mhttps://soundcloud.com/vanta_sec/sets/dr1pp1ng\033[0m"
echo -e "\033[0;31m EXAMPLE_LINE_5: \033[0;91mhttps://the--hacker.bandcamp.com/\033[0m"
echo -e "\033[0;31m EXAMPLE_LINE_6: \033[0;91mhttps://soundcloud.com/user-786674423\033[0m"
}
#####################################################################################################################
goto() {
label=$1
cmd=$(sed -En "/^[[:space:]]*#[[:space:]]*$label:[[:space:]]*#/{:a;n;p;ba};" "$DP3RUN")
eval "$cmd"
exit
}
#####################################################################################################################
if [ $# -lt 3 ]; then
echo -e "\n\t\033[0;31m ERROR: \033[0;91m[\033[0m NOT ENOUGH PARAMETERS SUPPLIED \033[0;91m]"; usage
fi
#####################
if [ $# -lt 3 ]; then
echo -e "\n\033[0;91m[ \033[0;31mMULTI-LINE MODE, PRESS CTRL+D WHEN DONE OR CTRL+C TO ABORT\033[0;91m ]\033[0;91m\n";
DP3=$(cat);
fi
#####################################################################################################################
echo -e "\033[0;33m\n[ PREREQUISITES CHECK ]\033[0;91m\n"
#####################################################################################################################
[ -e _cover.png ] || wget https://ansibomb.com/assets/dr1p.pentagram.png -O $PLAYLIST_ARTWORK
#####################################################################################################################
PREREQUISITES_PROGS=(tmux parallel jq elinks ffmpeg youtube-dl)
PREREQUISITES_PMODS=("pip eyed3")
FOUND_PROGS=()
#####################################################################################################################
for p in ${PREREQUISITES_PROGS[@]}; do
which $p >> /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "\033[0;32mlocated $p\033[0m"
[ "parallel" == $p ] && (echo -e "nosite\r\n"|parallel --citation > /dev/null 2>&1)
else
FOUND_PROGS+=("$p")
[ "youtube-dl" == $p ] && PREREQUISITES_PMODS+=("youtube-dl")
fi
done
#####################################################################################################################
MISSING_PMODS=()
################
for p in ${PREREQUISITES_PMODS[@]}; do
sp=$p
[ "youtube-dl" == $sp ] && ( sp=youtube_dl )
python3 -c "import $sp" >> /dev/null 2>&1
[ $? -eq 0 ] || MISSING_PMODS+=("$p")
done
#####################################################################################################################
for ap in ${MISSING_PMODS[@]}; do
echo -e "\033[0;33m[ automating $ap ]\033[0;34m"
################################################
[ "pip" == $ap ] && ( wget https://bootstrap.pypa.io/get-pip.py; python3 get-pip.py )
[ "eyed3" == $ap ] && ( python3 -m pip install --user $ap )
[ "youtube-dl" == $ap ] && ( python3 -m pip install --user $ap )
done
#####################################################################################################################
for p in ${PREREQUISITES_PMODS[@]}; do
python3 -c "import $p" >> /dev/null 2>&1
########################################
[ $? -eq 0 ] && echo -e "\033[0;32mlocated $p\033[0m" || ( echo -e "\033[0;31mmissing $p python3 module\033[0m")
done
#####################################################################################################################
for p in ${FOUND_PROGS[@]}; do
MESSAGE="\033[0;91minstallation required\033[0;0m"
##################################################
[ "tmux" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE"
[ "parallel" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE"
[ "jq" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE"
[ "elinks" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE"
[ "ffmpeg" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE"
done
#####################################################################################################################
[ 0 -ne "${#FOUND_PROGS[@]}" ] && echo -e "\n\033[0;33m[ PREREQUISITES CHECK - \033[0;33mFAILED \033[0;33m]\033[0m\n"
######################################
[ 0 -ne "${#FOUND_PROGS[@]}" ] && exit
#####################################################################################################################
echo -e "\033[0;33m\n[ PREREQUISITES CHECK - \033[0;34mPASSED \033[0;33m]\033[0m"
#####################################################################################################################
if [ -z "$DP3" ]; then
###################################################################################################### COMMAND LINE
echo -e "\033[0;33m[ FETCHING CONTENT IDS FROM PLAYLISTS ]\033[0m"
##################################################################
youtube-dl -j --flat-playlist $PLAYLIST_URL | jq -r '.url' > $PLAYLIST_URLSTEXT
###################################################################################################################
echo -e "\033[0;33m[ REBUILDING URLS FOR DOWNLOAD BATCHLIST ]\033[0m"
#####################################################################
cat $PLAYLIST_URLSTEXT|grep -v "bcbits.com\|sndcdn.com\|soundcloud\|bandcamp"|xargs -n 1|sed 's_^_https://youtu.be/_' > $PLAYLIST_URLBATCH
cat $PLAYLIST_URLSTEXT|grep "bcbits.com\|sndcdn.com\|soundcloud\|bandcamp" >> $PLAYLIST_URLBATCH
####################################################################################
if [ $(cat $PLAYLIST_URLBATCH|grep youtu.be|wc -c) -eq 18 ]; then
cat $PLAYLIST_URLBATCH|grep -v youtu.be >> buffer && mv buffer $PLAYLIST_URLBATCH;
fi
####################################################################################
echo -e "\033[0;34m[ `cat $PLAYLIST_URLSTEXT|wc -l` OF `cat $PLAYLIST_URLBATCH|wc -l` URLS PARSED ]\033[0m"
rm $PLAYLIST_URLSTEXT
else
######################################################################################################## MULTILINE
PLAYLIST_NAME=$(echo $DP3|xargs -n1|sed -n 1p)
PLAYLIST_GENRE=$(echo $DP3|xargs -n1|sed -n 2p)
PLAYLIST_URL=$(echo $DP3|xargs -n1|sed -n '3,$p')
####################################################################################
echo -e "\033[0;33m[ FETCHING CONTENT IDS FROM PLAYLISTS ]\033[0m"
####################################################################################
echo $PLAYLIST_URL|xargs -n1|grep youtube|xargs -I{} youtube-dl -j --flat-playlist {}|jq -r '.url'|grep -v \
youtube|sed 's_^_https://youtu.be/_' > $PLAYLIST_URLBATCH
echo $PLAYLIST_URL|xargs -n1|grep youtube|xargs -I{} youtube-dl -j --flat-playlist {}| jq -r '.url'|grep \
youtube|xargs -I{} youtube-dl -j --flat-playlist {}|jq -r '.id'|sed 's_^_https://youtu.be/_' >> $PLAYLIST_URLBATCH & disown
YOUTUBE_PID=$!
####################################################################################
echo $PLAYLIST_URL|xargs -n1|grep "sndcdn.com\|soundcloud"|xargs -I{} youtube-dl -j \
--flat-playlist {}|jq -r '.url' >> $PLAYLIST_URLBATCH & disown
SOUNDCLOUD_PID=$!
####################################################################################
echo $PLAYLIST_URL|xargs -n1|grep "bcbits.com\|bandcamp"| awk -F[/:] '{print $4}'|xargs -I{} elinks --dump --no-numbering \
{}|grep -e '.com/album' -e '.com/track'|sed 's/.*https/https/g'|uniq|xargs -I{} youtube-dl -j --flat-playlist \
{}|jq -r '.url' >> $PLAYLIST_URLBATCH & disown
BANDCAMP_PID=$!
####################################################################################
[ -e dp3_finished_yt ] && rm dp3_finished_yt; [ -e dp3_finished_sc ] && rm dp3_finished_sc; [ -e dp3_finished_bc ] && rm dp3_finished_bc
while [ -z $YOUTUBE_TRAP ]; do if [ $(ps -aux|grep $YOUTUBE_PID|grep -v "grep" > /dev/null 2>&1;echo $?) -eq 1 ]; then YOUTUBE_TRAP=1; touch dp3_finished_yt; echo -e "\n\033[0;31m[\033[0m YOUTUBE INDEX DONE \033[0;31m]\n"; fi; done & disown
while [ -z $SOUNDCLOUD_TRAP ]; do if [ $(ps -aux|grep $SOUNDCLOUD_PID|grep -v "grep" > /dev/null 2>&1;echo $?) -eq 1 ]; then SOUNDCLOUD_TRAP=1; touch dp3_finished_sc; echo -e "\n\033[0;31m[\033[0m SOUNDCLOUD INDEX DONE \033[0;31m]\n"; fi; done & disown
while [ -z $BANDCAMP_TRAP ]; do if [ $(ps -aux|grep $BANDCAMP_PID|grep -v "grep" > /dev/null 2>&1;echo $?) -eq 1 ]; then BANDCAMP_TRAP=1; touch dp3_finished_bc; echo -e "\n\033[0;31m[\033[0m BANDCAMP INDEX DONE \033[0;31m]\n"; fi; done & disown
####################################################################################
echo -e "\033[0;31m" && tail -f $PLAYLIST_URLBATCH & disown && TAIL_PID=$!
####################################################################################
FINITE_TRAP=0
while [ $FINITE_TRAP == 0 ]; do
if [ -e dp3_finished_yt ] && [ -e dp3_finished_sc ] && [ -e dp3_finished_bc ]; then
FINITE_TRAP=1;
sleep .1;
echo -e "\n\033[0;31m[\033[0m JOBS FINITE \033[0;31m]"
rm dp3_finished_* > /dev/null 2>&1;
kill -9 $TAIL_PID;
echo -e "\033[0;31m[\033[0m FINISHED INDEXING \033[0;31m-\033[0m `wc -l $PLAYLIST_URLBATCH` ITEMS SORTED \033[0;31m]\033[0m\n"
else
sleep 1; echo -n .
fi
done
####################################################################################
fi
#####################################################################################################################
[ -d "$PLAYLIST_NAME" ] || mkdir "$PLAYLIST_NAME"
##################################################
mv "$PLAYLIST_URLBATCH" "$PLAYLIST_NAME/url_batch.log"; cd "$PLAYLIST_NAME"
#####################################################################################################################
ENABLED_YOUTUBE=0; ENABLED_BANDCAMP=0; ENABLED_SOUNDCLOUD=0;
cat "url_batch.log"|grep "youtu.\|YOUTU.\|youtube.\|YOUTUBE." 2>&1>/dev/null
############################################################################
if [ $? -eq 0 ]; then
cat "url_batch.log"|grep "youtu.\|YOUTU.\|youtube.\|YOUTUBE."|grep -v "youtu.be/null" > "youtube_url_batch.log"
ENABLED_YOUTUBE=1
fi
#####################################################################################################################
cat "url_batch.log"|grep "sndcdn.com\|soundcloud.\|SOUNDCLOUD." 2>&1>/dev/null
##################################################################
if [ $? -eq 0 ]; then
cat "url_batch.log"|grep "sndcdn.com\|soundcloud.\|SOUNDCLOUD." > "soundcloud_url_batch.log"
ENABLED_SOUNDCLOUD=1
fi
#####################################################################################################################
cat "url_batch.log"|grep "bcbits.com\|bandcamp.\|BANDCAMP." 2>&1>/dev/null
##############################################################
if [ $? -eq 0 ]; then
cat "url_batch.log"|grep "bcbits.com\|bandcamp.\|BANDCAMP." > "bandcamp_url_batch.log"
ENABLED_BANDCAMP=1
fi
#####################################################################################################################
echo -e "\033[0;33m[ STARTING PARALLEL DOWNLOADS ]\033[0m\n"
#####################################################################################################################
if [ -f "youtube_url_batch.log" ]; then
[ ! -d "rips_youtube" ] && mkdir "rips_youtube"
mv "youtube_url_batch.log" "rips_youtube/youtube_url_batch.log"
echo 'cd rips_youtube; touch youtube_downloaded.log; clear; echo -e "\033[0;3mls window - \
youtube - [ initializing ]"; while :; do clear; [ $(ps -aux|grep youtube_download.sh|grep -v \
"eval\|grep" > /dev/null 2>&1;echo $?) -eq 1 ] && exit; echo -e "\033[0;31mprogress window -\
youtube - \033[0;92m`cat youtube_downloaded.log|wc -l`\033[0;31m/\033[0;92m\
`cat youtube_url_batch.log|wc -l`\033[0;31m files downloaded - \033[0;92m`ls -al *|grep \
-v "log\|mp3"|wc -l`\033[0;31m files actively downloading\033[0;94m"; ls -al|grep "webm\|m4a"; sleep 0.3; \
done' > youtube_progress.sh
fi
#####################################################################################################################
if [ -f "soundcloud_url_batch.log" ]; then
[ ! -d "rips_soundcloud" ] && mkdir "rips_soundcloud"
mv "soundcloud_url_batch.log" "rips_soundcloud/soundcloud_url_batch.log"
echo 'cd rips_soundcloud; touch soundcloud_downloaded.log; clear; echo -e "\033[0;3mprogress window - \
soundcloud - [ initializing ]"; while :; do clear; [ $(ps -aux|grep soundcloud_download.sh|grep -v \
"eval\|grep" > /dev/null 2>&1;echo $?) -eq 1 ] && exit;echo -e "\033[0;31mprogress window -\
soundcloud - \033[0;92m `cat soundcloud_downloaded.log|wc -l`\033[0;31m/\033[0;92m\
`cat soundcloud_url_batch.log|wc -l`\033[0;31m files downloaded - \033[0;92m`ls -al *|grep \
-v "log\|mp3"|wc -l`\033[0;31m files actively downloading\033[0;94m"; ls -al|grep wav; sleep 0.3; \
done' > soundcloud_progress.sh
fi
#####################################################################################################################
if [ -f "bandcamp_url_batch.log" ]; then
[ ! -d "rips_bandcamp" ] && mkdir "rips_bandcamp"
mv "bandcamp_url_batch.log" "rips_bandcamp/bandcamp_url_batch.log"
echo 'cd rips_bandcamp; touch bandcamp_downloaded.log; clear; echo -e "\033[0;3mprogress window - \
bandcamp - [ initializing ]"; while :; do clear; [ $(ps -aux|grep bandcamp_download.sh|grep -v \
"eval\|grep" > /dev/null 2>&1;echo $?) -eq 1 ] && exit;echo -e "\033[0;31mprogress window -\
bandcamp - \033[0;92m `cat bandcamp_downloaded.log|wc -l`\033[0;31m/\033[0;92m\
`cat bandcamp_url_batch.log|wc -l`\033[0;31m files downloaded - \033[0;92m`ls -al *|grep \
-v "log\|mp3"|wc -l`\033[0;31m files actively downloading\033[0;94m"; ls -al|grep aiff; sleep 0.3; \
done' > bandcamp_progress.sh
fi
#####################################################################################################################
echo "cd rips_youtube; clear; echo -e '\033[0;31mdownload window - youtube\033[0;94m'; parallel \
-j $THREADS youtube-dl -f bestaudio -i --download-archive youtube_downloaded.log \
--socket-timeout 180 --fragment-retries 10 --abort-on-unavailable-fragment --no-part --no-post-overwrites \
-ciw --extract-audio --audio-format mp3 --audio-quality 0 < youtube_url_batch.log" > youtube_download.sh
#####################################################################################################################
CMD_YT_D="bash youtube_download.sh"
#####################################################################################################################
echo "cd rips_soundcloud; clear; echo -e '\033[0;31mdownload window - soundcloud\033[0;94m'; \
parallel -j $THREADS youtube-dl -f bestaudio -i --download-archive soundcloud_downloaded.log \
--socket-timeout 180 --fragment-retries 10 --abort-on-unavailable-fragment --no-part --no-post-overwrites \
-ciw -o '%\(uploader\)s-%\(title\)s-%\(id\)s.%\(ext\)s' --extract-audio --audio-format mp3 --audio-quality \
0 < soundcloud_url_batch.log" > soundcloud_download.sh
#####################################################################################################################
CMD_SC_D="bash soundcloud_download.sh"
#####################################################################################################################
echo "cd rips_bandcamp; clear; echo -e '\033[0;31mdownload window - bandcamp\033[0;94m'; parallel \
-j $THREADS youtube-dl -f bestaudio -i --download-archive bandcamp_downloaded.log \
--socket-timeout 180 --fragment-retries 10 --abort-on-unavailable-fragment --no-part --no-post-overwrites \
-ciw --extract-audio --audio-format mp3 --audio-quality 0 < bandcamp_url_batch.log" > bandcamp_download.sh
#####################################################################################################################
CMD_BC_D="bash bandcamp_download.sh"
#####################################################################################################################
#####################################################################################################################
#####################################################################################################################
CMD_YT_P="bash youtube_progress.sh"
####################################
CMD_SC_P="bash soundcloud_progress.sh"
######################################
CMD_BC_P="bash bandcamp_progress.sh"
#####################################################################################################################
#####################################################################################################################
#####################################################################################################################
goto skip
redownload=${1:-redownload}
#redownload:#
echo "redownload missing files - cycle: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT"
REDOWNLOAD_COUNT=$((REDOWNLOAD_COUNT+1))
sleep 2
cd "$PLAYLIST_NAME"
goto end
#skip:#
echo "redownload skipped"
#end:#
#####################################################################################################################
#####################################################################################################################
#####################################################################################################################
COUNT=0; TASKS=(); LENGTH=()
if [ $ENABLED_YOUTUBE -eq 1 ]; then
COUNT=$((COUNT+2))
LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_YT_D); LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_YT_P);
fi
###############################################################################################
if [ $ENABLED_SOUNDCLOUD -eq 1 ]; then
COUNT=$((COUNT+2))
LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_SC_D); LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_SC_P);
fi
###############################################################################################
if [ $ENABLED_BANDCAMP -eq 1 ]; then
COUNT=$((COUNT+2))
LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_BC_D); LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_BC_P);
fi
#####################################################################################################################
if [ $COUNT -eq 2 ]; then
DYNARGS_A=$(echo ${TASKS[@]}|cut -d ' ' -f 1-${LENGTH[1]})
DYNARGS_B=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[1]+1))-${LENGTH[2]})
tmux \
new-session "eval $DYNARGS_A; exit; read" \; \
split-window "eval $DYNARGS_B; exit; read" \; \
select-layout tiled
fi
################################################
if [ $COUNT -eq 4 ]; then
DYNARGS_A=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[0]+1))-${LENGTH[1]})
DYNARGS_B=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[1]+1))-${LENGTH[2]})
DYNARGS_C=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[2]+1))-${LENGTH[3]})
DYNARGS_D=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[3]+1))-${LENGTH[4]})
tmux \
new-session "eval $DYNARGS_A; exit; read" \; \
split-window "eval $DYNARGS_B; exit; read" \; \
split-window "eval $DYNARGS_C; exit; read" \; \
split-window "eval $DYNARGS_D; exit; read" \; \
select-layout tiled
fi
################################################
if [ $COUNT -eq 6 ]; then
DYNARGS_A=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[0]+1))-${LENGTH[1]})
DYNARGS_B=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[1]+1))-${LENGTH[2]})
DYNARGS_C=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[2]+1))-${LENGTH[3]})
DYNARGS_D=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[3]+1))-${LENGTH[4]})
DYNARGS_E=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[4]+1))-${LENGTH[5]})
DYNARGS_F=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[5]+1))-${LENGTH[6]})
tmux \
new-session "eval $DYNARGS_B; exit; read" \; \
select-pane -t 0 \; \
split-window -h "eval $DYNARGS_A; exit; read" \; \
split-window -v -p 33 "eval $DYNARGS_C; exit; read" \; \
select-pane -t 0 \; \
split-window -v -p 33 "eval $DYNARGS_D; exit; read" \; \
select-pane -t 0 \; \
split-window -v -p 50 "eval $DYNARGS_F; exit; read" \; \
select-pane -t 3 \; \
split-window -v -p 50 "eval $DYNARGS_E; exit; read" \; \
select-layout default
fi
#####################################################################################################################
if [ $ENABLED_YOUTUBE -eq 1 ]; then
echo -e "youtube - redownload count: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT"
cd rips_youtube
if [ $REDOWNLOAD_COUNT -le $REDOWNLOAD_LIMIT ]; then
ytb=$(wc -l youtube_url_batch.log|awk '{print $1}')
ytd=$(wc -l youtube_downloaded.log|awk '{print $1}')
if [ $ytd -lt $ytb ]; then
echo "missing youtube downloads: redownloading"
DP3PWDBAK="$PWD"
cd "$DP3PWD"
goto redownload
else
echo "youtube downloads finished"
echo "PWD: $PWD"
ls *.mp3|xargs -I{} -d"\n" mv {} youtube_{}
mv *.{mp3,log} .. && cd ..
rm -Rf rips_youtube && rm -f youtube_progress.sh
fi
else
echo "redownload limit exceeded"
ls *.mp3|xargs -I{} -d"\n" mv {} youtube_{}
mv *.{mp3,log} .. && cd ..
rm -Rf rips_youtube && rm -f youtube_progress.sh
fi
fi
########################################################
if [ $ENABLED_SOUNDCLOUD -eq 1 ]; then
echo -e "soundcloud - redownload count: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT"
cd rips_soundcloud
if [ $REDOWNLOAD_COUNT -le $REDOWNLOAD_LIMIT ]; then
scb=$(wc -l soundcloud_url_batch.log|awk '{print $1}')
scd=$(wc -l soundcloud_downloaded.log|awk '{print $1}')
if [ $scd -lt $scb ]; then
echo "missing soundcloud downloads: redownloading"
DP3PWDBAK="$PWD"cd
cd "$DP3PWD"
goto redownload
else
echo "soundcloud downloads finished"
ls *.mp3|xargs -I{} -d"\n" mv {} soundcloud_{}
mv *.{mp3,log} .. && cd ..
rm -Rf rips_soundcloud && rm -f soundcloud_progress.sh
fi
else
echo "redownload limit exceeded"
ls *.mp3|xargs -I{} -d"\n" mv {} soundcloud_{}
mv *.{mp3,log} .. && cd ..
rm -Rf rips_soundcloud && rm -f soundcloud_progress.sh
fi
fi
########################################################
if [ $ENABLED_BANDCAMP -eq 1 ]; then
echo -e "bandcamp - redownload count: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT"
cd rips_bandcamp
if [ $REDOWNLOAD_COUNT -le $REDOWNLOAD_LIMIT ]; then
bcb=$(wc -l bandcamp_url_batch.log|awk '{print $1}')
bcd=$(wc -l bandcamp_downloaded.log|awk '{print $1}')
if [ $bcd -lt $bcb ]; then
echo "missing bandcamp downloads: redownloading"
DP3PWDBAK="$PWD"
cd "$DP3PWD"
goto redownload
else
echo "bandcamp downloads finished"
ls *.mp3|xargs -I{} -d"\n" mv {} bandcamp_{}
mv *.{mp3,log} .. && cd ..
rm -Rf rips_bandcamp && rm -f bandcamp_progress.sh
fi
else
echo "redownload limit exceeded"
ls *.mp3|xargs -I{} -d"\n" mv {} bandcamp_{}
mv *.{mp3,log} .. && cd ..
rm -Rf rips_bandcamp && rm -f bandcamp_progress.sh
fi
fi
#####################################################################################################################
cd $DP3PWD ################################################################################# DP3 TOOL ENCODED BELOW #
#####################################################################################################################
echo "IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" > dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBWRVJTSU9OIDIuMCAj" >> dr1p
echo "IyMgU09GDQpfX2RvY19fID0gJycnOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6" >> dr1p
echo "Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Lg0KIC9tTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5kLQ0KLU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTi4NCi9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0tDQovTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1tTk1NTU1NTU1NTU1N" >> dr1p
echo "bU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NaDpOTU1NTU1NTU1NTW95TU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTW0gLU5NTU1NTU1NTU1zLk5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0tDQov" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU15ICAtaG1t" >> dr1p
echo "bW1tTk5tLSBzTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NbWR5bys6LiAgIC4uLi4uLi4uLiAgLk5NTU15bU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NbXkrLS4uICAgICAgICAgICAgICAgICAgICAtaE5tLStNTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU0tDQovTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTW1zOi4gICAgICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgIC4uLiAvTU1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NaC8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgL01NTU1NTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NbU1NTU1NTU1N" >> dr1p
echo "TU1NbWhOOi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU0tDQovTU1NTU1NTU1NTU1NTU1NTU1NTStzTk1NTU1NTU1NTU4taDogICAgICAgICAu" >> dr1p
echo "LStzeXl5cy8tICAgICAgICAgICAgICAgICAtTk1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1zICtOTU1NTU1NTWhtLS1kLiAgOi4gIC1zZE5NTU1NTU5ObXkuICAgICAg" >> dr1p
echo "ICAgICAgICAgIDp5ZE1NTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NKyAg" >> dr1p
echo "OnloeXl5aGhzby4gb3MgIHloc2hOTU1NTU1NTWgrOi06LiAgOnMtICAgICAgICAgICAgIC5OTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU0tDQovTU1NTU1NTU1NTU1NTU1NTW1oby4gICAgICAgICAgLiAgIC55by5o" >> dr1p
echo "OnNNTU1NTU1NTU1NTmQrLiAgIC1OTnMtICAgICAgICAgICAgeU1NTU1NTU1NTU1NTU1NTU1NLQ0K" >> dr1p
echo "L01NTU1NTU1NTU1NTU1OaC8uICAgICAgICAgICAgICAgICAgIDorKy4tTU1NTU1NTU1NTU1NTW0r" >> dr1p
echo "LiAgOnltZHMuICAgICAgICAgIC1OTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTW1vLSAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICAgICAgICAgLk1NTU1NTU1NTU1NTU1NTWRvLiAgLi4tLiAgICAgICAg" >> dr1p
echo "ICAgeU1NTU1NTU1NTU1NTU1NTU0tDQovTU1NTU1NTU1NbW8uICAgICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgICAgIC5OTU1NTU1NTU1NTU1NTU1NTU55Ly4uICAgICAgICAgICAgIC5tTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NLQ0KL01NTU1NTU1Ocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaE1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1OaG8tLiAgICAgICAgICAgOk5NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1tOiAg" >> dr1p
echo "ICAgICAgLi9zeXl5by0gICAgICAgICAgICAgICAgIC1obU5NTU1NTU1NTU1NTU1NTU1NTU1NTW1o" >> dr1p
echo "bzouLiAgICAgICAvTk1NTU1NTU1NTU1NTU0tDQovTU1NTU1kLiAgICAgICAuc21NTU1OTk5tcy4g" >> dr1p
echo "IC4gICAgICAgICAgICAgIC4rTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTmR5LyAgICAuLnlNTU1N" >> dr1p
echo "TU1NTU1NTU1NLQ0KL01NTU1kLiAgICAgICAvbU1NTU1NeS86LS0uICBzby4gICAgICAgICAgICAg" >> dr1p
echo "Lm1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5kby0tOitzZE5NTU1NTU1NTU1NTU1NTS0NCi9NTU1O" >> dr1p
echo "LSAgICAgICAvTk1NTU1NTU1NZG8uICAgb01tKy4gICAgICAgICAgICAvTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TWROTU1NTU1NTk5OTU1tTU1NTU1NTU1NTU1NTU1NTU0tDQovTU1NbyAgICAgICAtTk1NTU1NTU1N" >> dr1p
echo "TU1kc28tLiAvaG1tKyAgICAgICAgICAgIHNNTU1NTU1NTU1NTU1NTU1zLW1NTU1NTU1NTU1NOmRN" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NLQ0KL01NTi4gICAgICAgc01NTU1NTU1NTU1NbyAub3MvLi4uLi4gICAg" >> dr1p
echo "ICAgICAgICAuZE1NTU1NTU1NTU1NTU1NcyAtTk1NTU1NTU1NTS06TU1NTU1NTU1NTU1NTU1NTS0N" >> dr1p
echo "Ci9NTWQgICAgICAgIG1NTU1NTU1NTU1NTS8gICAuOm9zKy0uICAgICAgICAgICAgIC5kTU1NTU1N" >> dr1p
echo "TU1NTU1ObS4gIC1zb29zeWhkbXMgLm1NTU1NTU1NTU1NTU1NTU0tDQovTU1zICAgICAgICBtTU1N" >> dr1p
echo "TU1NTU1NTU06ICAgICAgIC5oTmhzLy4uICAgICAgICAgLmRNTU1NTm1ocys6LS4gICAgICAgICAg" >> dr1p
echo "ICAgICArTU1NTm9NTU1NTU1NTU1NLQ0KL01NeSAgICAgICAgaE1NTU1NTU1NTU1NOiAgICAgICAg" >> dr1p
echo "b01NTU1NTmR5by8uICAgICAubU5oKy0uICAgICAgICAgICAgICAgICAgICAgICttTnkubU1NTU1N" >> dr1p
echo "TU1NTS0NCi9NTWQgICAgICAgICtNTU1NTU1NTU1NTS8gICAgICAgIDpNTU1NTU1NTU5zLi4uOm9o" >> dr1p
echo "aC8uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIG1NTU1NTU1NTU0tDQovTU1OLiAgICAg" >> dr1p
echo "ICAubU1NTU1NTU1NTU1vICAgICAgICAuTk1NTU1NTU5oaGROTU1oOiAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICBtTU1NTU1NTU1NLQ0KL01NTSsgICAgICAgIC9NTU1NTU1NTU1NaCAg" >> dr1p
echo "ICAgICAgIHlNTU1NTU1NTU1NTU4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu" >> dr1p
echo "Tk1NTU1NTU1NTS0NCi9NTU1tLiAgICAgICAgK01NTU1NTU1NTU4uICAgICAgICAuTk1NTU1NTU1N" >> dr1p
echo "TU4tICAgICAgICAgOnNkbU5OTmR5Ky4gICAgICAgICAgICAgICAgIGRNTU1NTU1NTU0tDQovTU1N" >> dr1p
echo "TW8gICAgICAgICArTU1NTU1NTU1NKyAgICAgICAgICtNTU1NTU1NTU0vICAgICAgICAtZE1NTU1N" >> dr1p
echo "TU5tbU5OLyAgICAgICAgICAgICAgICAuc2RNTU1NTU1NLQ0KL01NTU1OOiAgICAgICAgIDptTU1N" >> dr1p
echo "TU1NTW0uICAgICAgICAgb01NTU1NTU1oICAgICAgICAubU1NTU1NTU1tcy0gLi4gIC9vLiAgICAg" >> dr1p
echo "ICAgICAgICAubU1NTU1NTS0NCi9NTU1NTW0uICAgICAgICAgLnlNTU1NTU1NbyAgICAgICAgICBv" >> dr1p
echo "TU1NTU1NLyAgICAgICAgc01NTU1NTU1NTU1NaDogICA6Tk5vLiAgICAgICAgICAgIHNNTU1NTU0t" >> dr1p
echo "DQovTU1NTU1NbS4gICAgICAgICAgLWhNTU1NTU46ICAgICAgICAgIC9OTU1NTS4gICAgICAgIGRN" >> dr1p
echo "TU1NTU1NTU1NTU1NaC0gIDpobU55LiAgICAgICAgICAuTk1NTU1NLQ0KL01NTU1NTU1tLSAgICAg" >> dr1p
echo "ICAgICAgLXlOTU1NbS4gICAgICAgICAgLnlNTU0uICAgICAgICBkTU1NTU1NTU1NTU1NTU1OaDou" >> dr1p
echo "IC4uLi4gICAgICAgICAgIHlNTU1NTS0NCi9NTU1NTU1NTU4rICAgICAgICAgICAgLitoTk1kLiAg" >> dr1p
echo "ICAgICAgICAgOmhNOiAgICAgICAgZE1NTU1NTU1NTU1NTU1NTU1ObW8tICAgICAgICAgICAgICAu" >> dr1p
echo "Tk1NTU0tDQovTU1NTU1NTU1NTWgtICAgICAgICAgICAgIC4vc3MuICAgICAgICAgICAuOjogICAg" >> dr1p
echo "ICAgIHNNTU1NTU1NTU1NTU1NTU1NTU1NTm1zLy4gICAgICAgICAgIC9NTU1NLQ0KL01NTU1NTU1N" >> dr1p
echo "TU1NTm8uICAgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICA6TU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1OZG86Li4gICAgICAgb01NTS0NCi9NTU1NTU1NTU1NTU1NbW8uICAgICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5t" >> dr1p
echo "aDogICAgIC5kTU0tDQovTU1NTU1NTU1NTU1NTU1NTnk6LiAgICAgICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgICAgICAgICArTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OaCs6Oi8rc2ROTU1NLQ0KL01N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTmRvLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRNTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTk5OTk5NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU5kKy0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtTk1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p
echo "TU1NTU1NTU1NTU1NTU1NTU0tDQotTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OZG86LiAgICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICAgIC9OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1k" >> dr1p
echo "Lg0KIC15bU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTmRvLS4gICAgICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgK05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTm15Lg0KICAgLi4uLi4uLi4uLi4u" >> dr1p
echo "Li4uLi4uLi4uLi4uLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4tLi4uLi4uLi4uLi4u" >> dr1p
echo "Li4uLi4uLi4uLi4uLi4uLi4uLi4NCiAgICAuLi4uLi4gICAgICAgLi4uLi4uLi4uICAgICAgICAg" >> dr1p
echo "IC4uLi4uLi4uLi4uLi4uICAgICAgICAgIC4uLi4uLi4uLi4gICAgICAgICAgICAgIC4uLicnJw0K" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmltcG9ydCBvcyxzeXMscmUs" >> dr1p
echo "c3RyaW5nLHNodXRpbCxleWVkMw0KZnJvbSBleWVkMy5pZDMgaW1wb3J0IElEM19WMV8xLCBJRDNf" >> dr1p
echo "VjJfMywgSUQzX1YyXzQNCmZyb20gZXllZDMuaWQzLmZyYW1lcyBpbXBvcnQgSW1hZ2VGcmFtZQ0K" >> dr1p
echo "ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUNCmZyb20gZ2xvYiBpbXBvcnQgZ2xvYg0KIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmV5ZWQzLmxvZy5zZXRMZXZlbCgi" >> dr1p
echo "RVJST1IiKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmlmIF9fbmFt" >> dr1p
echo "ZV9fPT0nX19tYWluX18nOg0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN" >> dr1p
echo "CiAgICBlbW9qaV9wYXR0ZXJuID0gcmUuY29tcGlsZSgiWyINCiAgICAgICAgdSJcVTAwMDFGNjAw" >> dr1p
echo "LVxVMDAwMUY2NEYiICAjIGVtb3RpY29ucw0KICAgICAgICB1IlxVMDAwMUYzMDAtXFUwMDAxRjVG" >> dr1p
echo "RiIgICMgc3ltYm9scyAmIHBpY3RvZ3JhcGhzDQogICAgICAgIHUiXFUwMDAxRjY4MC1cVTAwMDFG" >> dr1p
echo "NkZGIiAgIyB0cmFuc3BvcnQgJiBtYXAgc3ltYm9scw0KICAgICAgICB1IlxVMDAwMUYxRTAtXFUw" >> dr1p
echo "MDAxRjFGRiIgICMgZmxhZ3MgKGlPUykNCiAgICAgICAgIl0rIiwgZmxhZ3M9cmUuVU5JQ09ERSkN" >> dr1p
echo "CiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAg" >> dr1p
echo "ICBzb25nX2FsYnVtPXN0cihzeXMuYXJndlsxXSkNCiAgICBleGNlcHQ6DQogICAgICAgIHByaW50" >> dr1p
echo "KCdubyBhbGJ1bSBzcGVjaWZpZWQnKQ0KICAgICAgICBzeXMuZXhpdCgxKQ0KICAgICMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAgIHNvbmdfZ2VucmU9" >> dr1p
echo "c3RyKHN5cy5hcmd2WzJdKQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcHJpbnQoJ25vIGdlbnJlIHNw" >> dr1p
echo "ZWNpZmllZCcpDQogICAgICAgIHN5cy5leGl0KDEpDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIw0KICAgIHRyeToNCiAgICAgICAgcGF0aF90b19pbWFnZT1zdHIoc3lzLmFy" >> dr1p
echo "Z3ZbM10pDQogICAgZXhjZXB0Og0KICAgICAgICBwcmludCgibm8gcGF0aCB0byAnY292ZXIuanBn" >> dr1p
echo "JyBzcGVjaWZpZWQiKQ0KICAgICAgICBzeXMuZXhpdCgxKQ0KICAgICMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMNCiAgICBzaHV0aWwuY29weShwYXRoX3RvX2ltYWdlLHNvbmdfYWxi" >> dr1p
echo "dW0pDQogICAgb3MuY2hkaXIoc29uZ19hbGJ1bSkNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjDQogICAgZXhwb3J0X3RpbWU9ZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVt" >> dr1p
echo "JWQlWS4lSCVNJVMnKQ0KICAgIGV4cG9ydF90aW1lWzo0XStleHBvcnRfdGltZVs2Ol0NCiAgICBl" >> dr1p
echo "eHBvcnRfZGlyZWN0b3J5PWYiZHIxcF9fe3NvbmdfYWxidW19Ig0KICAgIHRyeToNCiAgICAgICAg" >> dr1p
echo "c2h1dGlsLnJtdHJlZShleHBvcnRfZGlyZWN0b3J5KQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcGFz" >> dr1p
echo "cw0KICAgIG9zLm1rZGlyKGV4cG9ydF9kaXJlY3RvcnkpDQogICAgcHJpbnQoZiJcblx4MWJbOTBt" >> dr1p
echo "WyBceDFiWzMxbWV4cG9ydCBkaXJlY3RvcnlceDFiWzkwbTogXHgxYls5MW17ZXhwb3J0X2RpcmVj" >> dr1p
echo "dG9yeX0gXHgxYls5MG1dIikNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "DQogICAgZmlsZWxpc3Q9Z2xvYignKi5tcDMnKQ0KICAgIHRyYWNrX2NvdW50PWxlbihmaWxlbGlz" >> dr1p
echo "dCkNCiAgICBwcmludChmIlx4MWJbOTBtWyBceDFiWzkxbXt0cmFja19jb3VudH0gXHgxYlszMW1z" >> dr1p
echo "b25ncyBkaXNjb3ZlcmVkIFx4MWJbOTBtXSIpDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIw0KICAgIHBsYXlsaXN0PSJfcGxheWxpc3QubTN1Ig0KICAgIHBsYXlsaXN0X3Bh" >> dr1p
echo "dGgyZmlsZT1mJ3tleHBvcnRfZGlyZWN0b3J5fS97cGxheWxpc3R9Jw0KICAgIGY9b3BlbihwbGF5" >> dr1p
echo "bGlzdF9wYXRoMmZpbGUsJ3cnKQ0KICAgIGYud3JpdGUoIiNFWFRNM1VcbiIpDQogICAgZi5jbG9z" >> dr1p
echo "ZSgpDQogICAgcHJpbnQoZiJceDFiWzkwbVsgXHgxYlszMW1wbGF5bGlzdCBjcmVhdGVkXHgxYls5" >> dr1p
echo "MG06IFx4MWJbOTFte3BsYXlsaXN0fSBceDFiWzkwbV1ceDFiWzBtXG4iKQ0KICAgICMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAgIGZvciB0cmFja19p" >> dr1p
echo "bmRleCx0aGVtcDMgaW4gZW51bWVyYXRlKGZpbGVsaXN0KToNCiAgICAgICAgICAgICMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICB0cmFja19wYWQ9bGVuKHN0cih0cmFja19j" >> dr1p
echo "b3VudCkpDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAg" >> dr1p
echo "ICAgcHJpbnQoZiJceDFiWzkwbVsgXHgxYlszMW1wcm9jZXNzaW5nIHNvbmcgXHgxYls5MW17c3Ry" >> dr1p
echo "KHRyYWNrX2luZGV4KzEpLnpmaWxsKHRyYWNrX3BhZCl9IFx4MWJbOTBtLyBceDFiWzkxbXtzdHIo" >> dr1p
echo "dHJhY2tfY291bnQpLnpmaWxsKHRyYWNrX3BhZCl9IFx4MWJbOTBtXVx4MWJbMG0iKQ0KICAgICAg" >> dr1p
echo "ICAgICAgcHJpbnQoZiJceDFiWzkwbVx0ZmlsZW5hbWU6IHt0aGVtcDN9XHgxYlswbSIpDQogICAg" >> dr1p
echo "ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgc2h1dGlsLmNv" >> dr1p
echo "cHkodGhlbXAzLGYne2V4cG9ydF9kaXJlY3Rvcnl9JykNCiAgICAgICAgICAgIHNvbmc9ZXllZDMu" >> dr1p
echo "bG9hZChmJ3tleHBvcnRfZGlyZWN0b3J5fS97dGhlbXAzfScpDQogICAgICAgICAgICAjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgaWYgbm90IHNvbmcudGFnOg0KICAgICAg" >> dr1p
echo "ICAgICAgICAgIHNvbmcuaW5pdFRhZygpDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIw0KICAgICAgICAgICAgc29uZ19maWxlbmFtZT10aGVtcDMNCiAgICAgICAgICAgIHNv" >> dr1p
echo "bmdfZXh0ZW5zaW9uPXNvbmdfZmlsZW5hbWVbLTM6XQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgIGlmIHNvbmdfZmlsZW5hbWUuZmluZCgnUFJFTUlF" >> dr1p
echo "UkUgLSAnKT4tMToNCiAgICAgICAgICAgICAgICBzb25nX2ZpbGVuYW1lPXNvbmdfZmlsZW5hbWUu" >> dr1p
echo "cmVwbGFjZSgnUFJFTUlFUkUgLSAnLCcnKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMNCiAgICAgICAgICAgIGlmIHNvbmdfZmlsZW5hbWUuZmluZCgnUFJFTUlFUkUgXyAn" >> dr1p
echo "KT4tMToNCiAgICAgICAgICAgICAgICBzb25nX2ZpbGVuYW1lPXNvbmdfZmlsZW5hbWUucmVwbGFj" >> dr1p
echo "ZSgnUFJFTUlFUkUgXyAnLCcnKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMgPDw8IFlPVVRVQkUgPDw8IFlPVVRVQkUNCiAgICAgICAgICAgIGlmIHNvbmdfZmlsZW5hbWUu" >> dr1p
echo "c3RhcnRzd2l0aCgneW91dHViZV8nKToNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjDQogICAgICAgICAgICAgICAgc29uZ192aWRlb2lkPXNvbmdfZmlsZW5hbWVbLTE1Oi00" >> dr1p
echo "XQ0KICAgICAgICAgICAgICAgIHNvbmdfYXJ0aXN0PXNvbmdfZmlsZW5hbWVbOi0xNl0uc3BsaXQo" >> dr1p
echo "JyAtICcpWzBdLnN0cmlwKClbbGVuKCd5b3V0dWJlXycpOl0NCiAgICAgICAgICAgICAgICAjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgICBzb25nX3RpdGxlPXNvbmdfZmlsZW5hbWVbOi0xNl0uc3BsaXQoJyAtICcpWzFdLnN0cmlw" >> dr1p
echo "KCkNCiAgICAgICAgICAgICAgICBleGNlcHQ6DQogICAgICAgICAgICAgICAgICAgIHNvbmdfdGl0" >> dr1p
echo "bGU9JycNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAg" >> dr1p
echo "ICAgICAgdXJsPWYiaHR0cDovL3lvdXR1LmJlL3tzb25nX3ZpZGVvaWR9Ig0KICAgICAgICAgICAg" >> dr1p
echo "ICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIDw8PCBCQU5EQ0FNUCA8PDwgQkFORENBTVANCiAgICAgICAgICAgIGlmIHNvbmdf" >> dr1p
echo "ZmlsZW5hbWUuc3RhcnRzd2l0aCgnYmFuZGNhbXBfJyk6DQogICAgICAgICAgICAgICAgIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIHNvbmdfdmlkZW9pZD1zb25nX2ZpbGVu" >> dr1p
echo "YW1lLnNwbGl0KCctJylbLTFdWzotNF0NCiAgICAgICAgICAgICAgICBidWZmZXI9c29uZ19maWxl" >> dr1p
echo "bmFtZS5yZXBsYWNlKCItIitzb25nX2ZpbGVuYW1lLnNwbGl0KCctJylbLTFdLCcnKVtsZW4oJ2Jh" >> dr1p
echo "bmRjYW1wXycpOl0uc3BsaXQoJyAtICcpDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIw0KICAgICAgICAgICAgICAgIGlmIGxlbihidWZmZXIpPT0zOg0KICAgICAgICAgICAg" >> dr1p
echo "ICAgICAgICBpZiBidWZmZXJbMF0gPT0gYnVmZmVyWzFdOg0KICAgICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgc29uZ19hcnRpc3Q9YnVmZmVyWzFdDQogICAgICAgICAgICAgICAgICAgICAgICBzb25nX3Rp" >> dr1p
echo "dGxlPWJ1ZmZlclsyXQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAg" >> dr1p
echo "ICAgICAgICAgICAgICBpZiBsZW4oYnVmZmVyKT09MjoNCiAgICAgICAgICAgICAgICAgICAgc29u" >> dr1p
echo "Z19hcnRpc3Q9YnVmZmVyWzBdDQogICAgICAgICAgICAgICAgICAgIHNvbmdfdGl0bGU9YnVmZmVy" >> dr1p
echo "WzFdDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAg" >> dr1p
echo "ICAgIHVybD1mImh0dHBzOi8vYmFuZGNhbXAuY29tL0VtYmVkZGVkUGxheWVyL3Y9Mi90cmFjaz17" >> dr1p
echo "c29uZ192aWRlb2lkfSINCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog" >> dr1p
echo "ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyA8PDwgU09VTkRDTE9VRCA8PDwg" >> dr1p
echo "U09VTkRDTE9VRA0KICAgICAgICAgICAgaWYgc29uZ19maWxlbmFtZS5zdGFydHN3aXRoKCdzb3Vu" >> dr1p
echo "ZGNsb3VkXycpOg0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAg" >> dr1p
echo "ICAgICAgICAgICBzb25nX3ZpZGVvaWQ9c29uZ19maWxlbmFtZS5zcGxpdCgnLScpWy0xXVs6LTRd" >> dr1p
echo "DQogICAgICAgICAgICAgICAgYnVmZmVyPXNvbmdfZmlsZW5hbWVbbGVuKCdzb3VuZGNsb3VkXycp" >> dr1p
echo "Oi1sZW4oc29uZ19maWxlbmFtZS5zcGxpdCgnLScpWy0xXSktMV0NCiAgICAgICAgICAgICAgICB1" >> dr1p
echo "bmNsb3NlZF9jb3VudD0wDQogICAgICAgICAgICAgICAgaWYgYnVmZmVyLmZpbmQoJygnKT4tMTog" >> dr1p
echo "dW5jbG9zZWRfY291bnQrPTENCiAgICAgICAgICAgICAgICBpZiBidWZmZXIuZmluZCgnKScpPi0x" >> dr1p
echo "OiB1bmNsb3NlZF9jb3VudCs9MQ0KICAgICAgICAgICAgICAgIGlmIHVuY2xvc2VkX2NvdW50PT0x" >> dr1p
echo "OiBidWZmZXI9YnVmZmVyLnJlcGxhY2UoJygnLCcgLSAnKS5yZXBsYWNlKCcpJywnIC0gJykNCiAg" >> dr1p
echo "ICAgICAgICAgICAgICBpZiAodW5jbG9zZWRfY291bnQgJSAyKSA9PSAwOg0KICAgICAgICAgICAg" >> dr1p
echo "ICAgICAgICBidWZmZXI9c29uZ19maWxlbmFtZVs6LWxlbihzb25nX3ZpZGVvaWQpLWxlbihzb25n" >> dr1p
echo "X2V4dGVuc2lvbiktbGVuKCcuJyktbGVuKCctJyldLnJlcGxhY2UoJyggJywnJykucmVwbGFjZSgn" >> dr1p
echo "ICknLCcnKS5sb3dlcigpLnJlcGxhY2UoJ3NvdW5kY2xvdWRfJywnJykuc3BsaXQoJy0nKQ0KICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICBidWZmZXINCiAgICAgICAgICAgICAgICBpZiBsZW4oYnVmZmVyKT09" >> dr1p
echo "MzoNCiAgICAgICAgICAgICAgICAgICAgaWYgYnVmZmVyWzBdPT1idWZmZXJbMV06DQogICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICBzb25nX2FydGlzdD1idWZmZXJbMV0uc3RyaXAoKQ0KICAgICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgc29uZ190aXRsZT1idWZmZXJbMl0uc3RyaXAoKQ0KICAgICAgICAgICAg" >> dr1p
echo "ICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19hcnRpc3Q9YnVmZmVy" >> dr1p
echo "WzBdLnN0cmlwKCkrYnVmZmVyWzFdLnN0cmlwKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHNv" >> dr1p
echo "bmdfdGl0bGU9YnVmZmVyWzJdLnN0cmlwKCkNCiAgICAgICAgICAgICAgICBlbGlmIGxlbihidWZm" >> dr1p
echo "ZXIpPT0yOg0KICAgICAgICAgICAgICAgICAgICBzb25nX2FydGlzdD1idWZmZXJbMF0uc3RyaXAo" >> dr1p
echo "KQ0KICAgICAgICAgICAgICAgICAgICBzb25nX3RpdGxlPWJ1ZmZlclsxXS5zdHJpcCgpDQogICAg" >> dr1p
echo "ICAgICAgICAgICAgZWxpZiBsZW4oYnVmZmVyKT49NDoNCiAgICAgICAgICAgICAgICAgICAgdHJ5" >> dr1p
echo "Og0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19hcnRpc3Q9YnVmZmVyLnNwbGl0KCctJylb" >> dr1p
echo "MF0uc3RyaXAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ190aXRsZT1idWZmZXIuc3Bs" >> dr1p
echo "aXQoJy0nKVsxXS5zdHJpcCgpLnJlcGxhY2UoJ18nLCcuJykNCiAgICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgIHNvbmdfdGl0bGUrPSJfXyIrJycuam9pbihidWZmZXIuc3BsaXQoJy0nKVsyOl0pLnN0cmlw" >> dr1p
echo "KCkucmVwbGFjZSgnICcsJy4nKQ0KICAgICAgICAgICAgICAgICAgICBleGNlcHQ6DQogICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICBzb25nX2FydGlzdD1idWZmZXJbMF0uc3BsaXQoJy0nKVswXS5zdHJp" >> dr1p
echo "cCgpDQogICAgICAgICAgICAgICAgICAgICAgICBzb25nX3RpdGxlPWJ1ZmZlclsxXS5zcGxpdCgi" >> dr1p
echo "LSIpWzBdLnN0cmlwKCkucmVwbGFjZSgiXyIsICIuIikucmVwbGFjZSgiWyIsIi4iKS5yZXBsYWNl" >> dr1p
echo "KCJdIiwiLiIpDQogICAgICAgICAgICAgICAgICAgICAgICBzb25nX3RpdGxlKz1zdHIoIl9fIiAr" >> dr1p
echo "ICIiLmpvaW4oYnVmZmVyWzI6XSkpLnN0cmlwKCkucmVwbGFjZSgiICIsICIuIikNCiAgICAgICAg" >> dr1p
echo "ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgaWYgc29uZ19h" >> dr1p
echo "cnRpc3QuZmluZCgnZnJlZSBkbCcpID4gLTE6DQogICAgICAgICAgICAgICAgICAgIHNvbmdfYXJ0" >> dr1p
echo "aXN0PXNvbmdfYXJ0aXN0LnJlcGxhY2UoJ2ZyZWUgZGwnLCcnKQ0KICAgICAgICAgICAgICAgIGlm" >> dr1p
echo "IHNvbmdfdGl0bGUuZmluZCgnZnJlZSBkbCcpID4gLTE6DQogICAgICAgICAgICAgICAgICAgIHNv" >> dr1p
echo "bmdfdGl0bGU9c29uZ190aXRsZS5yZXBsYWNlKCdmcmVlIGRsJywnJykNCiAgICAgICAgICAgICAg" >> dr1p
echo "ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgdXJsPWYiaHR0cHM6Ly93" >> dr1p
echo "LnNvdW5kY2xvdWQuY29tL3BsYXllci8/dXJsPWh0dHBzOi8vYXBpLnNvdW5kY2xvdWQuY29tL3Ry" >> dr1p
echo "YWNrcy97c29uZ192aWRlb2lkfSINCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAg" >> dr1p
echo "aWYgc29uZ19hcnRpc3QuZmluZCgnWycpID4gLTE6DQogICAgICAgICAgICAgICAgIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIHN4PXNvbmdfYXJ0aXN0LmZpbmQoJ1snKQ0K" >> dr1p
echo "ICAgICAgICAgICAgICAgIHN5PXNvbmdfYXJ0aXN0LmZpbmQoJ10nKSsxDQogICAgICAgICAgICAg" >> dr1p
echo "ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIGlmIGxlbihzb25nX2Fy" >> dr1p
echo "dGlzdFtzeDpzeV0pID4gNToNCiAgICAgICAgICAgICAgICAgICAgc29uZ19hcnRpc3Q9c29uZ19h" >> dr1p
echo "cnRpc3QucmVwbGFjZShzb25nX2FydGlzdFtzeDpzeV0sJycpLnN0cmlwKCkNCiAgICAgICAgICAg" >> dr1p
echo "ICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIw0KICAgICAgICAgICAgaWYgc29uZ190aXRsZS5maW5kKCdbJykgPiAtMToNCiAg" >> dr1p
echo "ICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgc3g9" >> dr1p
echo "c29uZ190aXRsZS5maW5kKCdbJykNCiAgICAgICAgICAgICAgICBzeT1zb25nX3RpdGxlLmZpbmQo" >> dr1p
echo "J10nKSsxDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAg" >> dr1p
echo "ICAgICAgIGlmIGxlbihzb25nX3RpdGxlW3N4OnN5XSkgPiA1Og0KICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICBzb25nX3RpdGxlPXNvbmdfdGl0bGUucmVwbGFjZShzb25nX3RpdGxlW3N4OnN5XSwnJykuc3Ry" >> dr1p
echo "aXAoKQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAg" >> dr1p
echo "ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICBpZiBzb25nX2FydGlzdC5m" >> dr1p
echo "aW5kKCcoJykgPiAtMToNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog" >> dr1p
echo "ICAgICAgICAgICAgICAgc3g9c29uZ19hcnRpc3QuZmluZCgnKCcpDQogICAgICAgICAgICAgICAg" >> dr1p
echo "c3k9c29uZ19hcnRpc3QuZmluZCgnKScpKzENCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjDQogICAgICAgICAgICAgICAgaWYgc29uZ19hcnRpc3Rbc3g6c3ldLmxvd2VyKCku" >> dr1p
echo "ZmluZCgnb2ZmaWNpYWwnKSA+IC0xOg0KICAgICAgICAgICAgICAgICAgICBpZiBzb25nX2FydGlz" >> dr1p
echo "dFtzeDpzeV0ubG93ZXIoKS5maW5kKCdhdWRpbycpID4gLTEgb3Igc29uZ19hcnRpc3Rbc3g6c3ld" >> dr1p
echo "Lmxvd2VyKCkuZmluZCgndmlkZW8nKSA+IC0xOg0KICAgICAgICAgICAgICAgICAgICAgICAgc29u" >> dr1p
echo "Z19hcnRpc3Q9c29uZ19hcnRpc3QucmVwbGFjZShzb25nX2FydGlzdFtzeDpzeV0sJycpLnN0cmlw" >> dr1p
echo "KCkNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAg" >> dr1p
echo "ICAgaWYgc29uZ19hcnRpc3Rbc3g6c3ldLmxvd2VyKCkuZmluZCgnIycpID4gLTE6DQogICAgICAg" >> dr1p
echo "ICAgICAgICAgICAgIHNvbmdfYXJ0aXN0PXNvbmdfYXJ0aXN0LnJlcGxhY2Uoc29uZ19hcnRpc3Rb" >> dr1p
echo "c3g6c3ldLCcnKS5zdHJpcCgpDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "Iw0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgIGlm" >> dr1p
echo "IHNvbmdfdGl0bGUuZmluZCgnKCcpID4gLTE6DQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIHN4PXNvbmdfdGl0bGUuZmluZCgnKCcpDQogICAg" >> dr1p
echo "ICAgICAgICAgICAgc3k9c29uZ190aXRsZS5maW5kKCcpJykrMQ0KICAgICAgICAgICAgICAgICMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICBpZiBzb25nX3RpdGxlW3N4OnN5" >> dr1p
echo "XS5sb3dlcigpLmZpbmQoJ29mZmljaWFsJykgPiAtMToNCiAgICAgICAgICAgICAgICAgICAgaWYg" >> dr1p
echo "c29uZ190aXRsZVtzeDpzeV0ubG93ZXIoKS5maW5kKCdhdWRpbycpID4gLTEgb3Igc29uZ190aXRs" >> dr1p
echo "ZVtzeDpzeV0ubG93ZXIoKS5maW5kKCd2aWRlbycpID4gLTE6DQogICAgICAgICAgICAgICAgICAg" >> dr1p
echo "ICAgICBzb25nX3RpdGxlPXNvbmdfdGl0bGUucmVwbGFjZShzb25nX3RpdGxlW3N4OnN5XSwnJyku" >> dr1p
echo "c3RyaXAoKQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAg" >> dr1p
echo "ICAgICAgICBpZiBzb25nX3RpdGxlW3N4OnN5XS5sb3dlcigpLmZpbmQoJyMnKSA+IC0xOg0KICAg" >> dr1p
echo "ICAgICAgICAgICAgICAgICBzb25nX3RpdGxlPXNvbmdfdGl0bGUucmVwbGFjZShzb25nX3RpdGxl" >> dr1p
echo "W3N4OnN5XSwnJykuc3RyaXAoKQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMNCiAgICAgICAgICAgICAgICBpZiBzb25nX3RpdGxlW3N4OnN5XS5sb3dlcigpLmZpbmQoJ2V4" >> dr1p
echo "Y2x1c2l2ZScpID4gLTE6DQogICAgICAgICAgICAgICAgICAgIGlmIHNvbmdfdGl0bGVbc3g6c3ld" >> dr1p
echo "Lmxvd2VyKCkuZmluZCgnYm9udXMnKSA+IC0xIG9yIHNvbmdfdGl0bGVbc3g6c3ldLmxvd2VyKCku" >> dr1p
echo "ZmluZCgndmlkZW8nKSA+IC0xOg0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ190aXRsZT1z" >> dr1p
echo "b25nX3RpdGxlLnJlcGxhY2Uoc29uZ190aXRsZVtzeDpzeV0sJycpLnN0cmlwKCkNCiAgICAgICAg" >> dr1p
echo "ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgc29uZy50YWcuYXJ0aXN0PXNvbmdfYXJ0aXN0DQog" >> dr1p
echo "ICAgICAgICAgICBzb25nLnRhZy5hbGJ1bT1zb25nX2FsYnVtDQogICAgICAgICAgICBzb25nLnRh" >> dr1p
echo "Zy5nZW5yZT1zb25nX2dlbnJlDQogICAgICAgICAgICBzb25nLnRhZy50cmFja19udW09KHRyYWNr" >> dr1p
echo "X2luZGV4KzEsdHJhY2tfY291bnQpDQogICAgICAgICAgICBzb25nLnRhZy5kaXNjX251bT0oMSwx" >> dr1p
echo "KQ0KICAgICAgICAgICAgc29uZy50YWcudGl0bGU9c29uZ190aXRsZQ0KICAgICAgICAgICAgc29u" >> dr1p
echo "Zy50YWcuY29tbWVudHMuc2V0KHUiLltkXS4gaXJjZC5jaGF0LzY2OTcjdGNwZGlyZWN0XG5cbnt9" >> dr1p
echo "IHBsYXlsaXN0Ii5mb3JtYXQoc29uZ19hbGJ1bSkpDQogICAgICAgICAgICBzb25nLnRhZy51c2Vy" >> dr1p
echo "X3VybF9mcmFtZXMuc2V0KGJ5dGVzKHVybC5lbmNvZGUoKSkpDQogICAgICAgICAgICBzb25nLnRh" >> dr1p
echo "Zy5yZWNvcmRpbmdfZGF0ZT1kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVktJW0tJWQnKQ0KICAg" >> dr1p
echo "ICAgICAgICAgc29uZy50YWcub3JpZ2luYWxfcmVsZWFzZV9kYXRlPWRhdGV0aW1lLm5vdygpLnN0" >> dr1p
echo "cmZ0aW1lKCclWScpDQogICAgICAgICAgICBzb25nLnRhZy5wb3B1bGFyaXRpZXMuc2V0KGVtYWls" >> dr1p
echo "PSJkQGFvbC5jb20iLHJhdGluZz01LHBsYXlfY291bnQ9MCkNCiAgICAgICAgICAgIHNvbmcudGFn" >> dr1p
echo "LmltYWdlcy5zZXQoSW1hZ2VGcmFtZS5GUk9OVF9DT1ZFUiwgb3BlbihwYXRoX3RvX2ltYWdlLCdy" >> dr1p
echo "YicpLnJlYWQoKSwgJ2ltYWdlL2pwZWcnKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMNCiAgICAgICAgICAgIHNvbmcudGFnLnNhdmUodmVyc2lvbj1JRDNfVjJfNCkNCiAg" >> dr1p
echo "ICAgICAgICAgIHNvbmcudGFnLnNhdmUodmVyc2lvbj1JRDNfVjJfMykNCiAgICAgICAgICAgIHNv" >> dr1p
echo "bmcudGFnLnNhdmUodmVyc2lvbj1JRDNfVjFfMSkNCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjDQogICAgICAgICAgICBmaWxlcmVuYW1lZD1mJ3tzb25nX2FydGlzdH0nLmxv" >> dr1p
echo "d2VyKCkucmVwbGFjZSgnICcsJy4nKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMNCiAgICAgICAgICAgIGlmIHNvbmdfdGl0bGU6DQogICAgICAgICAgICAgICAgZmlsZXJl" >> dr1p
echo "bmFtZWQrPSJfXyIrZiJ7c29uZ190aXRsZX0iLmxvd2VyKCkucmVwbGFjZSgnICcsJy4nKQ0KICAg" >> dr1p
echo "ICAgICAgICAgZmlsZXJlbmFtZWQrPWYiLntzb25nX2V4dGVuc2lvbn0iDQogICAgICAgICAgICBm" >> dr1p
echo "aWxlcmVuYW1lZD1maWxlcmVuYW1lZC5yZXBsYWNlKCcmJywnYW5kJykNCiAgICAgICAgICAgIGZp" >> dr1p
echo "bGVyZW5hbWVkPWZpbGVyZW5hbWVkLnJlcGxhY2UoJy4oJywnX18nKQ0KICAgICAgICAgICAgZmls" >> dr1p
echo "ZXJlbmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgnKS4nLCcuJykNCiAgICAgICAgICAgIGZpbGVy" >> dr1p
echo "ZW5hbWVkPWZpbGVyZW5hbWVkLnJlcGxhY2UoJywuJywnLmFuZC4nKQ0KICAgICAgICAgICAgZmls" >> dr1p
echo "ZXJlbmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgnLl8uJywnX18nKQ0KICAgICAgICAgICAgZmls" >> dr1p
echo "ZXJlbmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgnwqknLCcnKQ0KICAgICAgICAgICAgZmlsZXJl" >> dr1p
echo "bmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgiJyIsIiIpDQogICAgICAgICAgICBmaWxlcmVuYW1l" >> dr1p
echo "ZD1maWxlcmVuYW1lZC5yZXBsYWNlKCciJywnJykNCiAgICAgICAgICAgIGZpbGVyZW5hbWVkPWVt" >> dr1p
echo "b2ppX3BhdHRlcm4uc3ViKHInJywgZmlsZXJlbmFtZWQpDQogICAgICAgICAgICAjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgb3MucmVuYW1lKGYne2V4cG9ydF9kaXJlY3Rv" >> dr1p
echo "cnl9L3t0aGVtcDN9JyxmJ3tleHBvcnRfZGlyZWN0b3J5fS97ZmlsZXJlbmFtZWR9JykNCiAgICAg" >> dr1p
echo "ICAgICAgIHByaW50KGYnXHgxYls5MG1cdCByZW5hbWVkOiB7ZmlsZXJlbmFtZWR9XHgxYlswbScp" >> dr1p
echo "DQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgc29u" >> dr1p
echo "Z19sZW5ndGg9c29uZy5pbmZvLnRpbWVfc2Vjcw0KICAgICAgICAgICAgZHVyYXRpb25fbWluLGR1" >> dr1p
echo "cmF0aW9uX3NlYz0iezouMmZ9Ii5mb3JtYXQoNTY1LjAzMi82MCkuc3BsaXQoJy4nKQ0KICAgICAg" >> dr1p
echo "ICAgICAgcHJpbnQoZidceDFiWzkwbVx0ZHVyYXRpb246IHtkdXJhdGlvbl9taW59bXtkdXJhdGlv" >> dr1p
echo "bl9zZWN9c1x4MWJbMG0nKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN" >> dr1p
echo "CiAgICAgICAgICAgIGY9b3BlbihwbGF5bGlzdF9wYXRoMmZpbGUsJ2EnKQ0KICAgICAgICAgICAg" >> dr1p
echo "YXJ0aXN0X3JlbmFtZWQ9c29uZ19hcnRpc3QubG93ZXIoKQ0KICAgICAgICAgICAgdGl0bGVfcmVu" >> dr1p
echo "YW1lZD1zb25nX3RpdGxlLmxvd2VyKCkNCiAgICAgICAgICAgIGYud3JpdGUoZiIjRVhUSU5GOntp" >> dr1p
echo "bnQoc29uZ19sZW5ndGgpfSx7YXJ0aXN0X3JlbmFtZWR9IC0ge3RpdGxlX3JlbmFtZWR9XG4iKQ0K" >> dr1p
echo "ICAgICAgICAgICAgZi53cml0ZShmIntmaWxlcmVuYW1lZH1cbiIpDQogICAgICAgICAgICBmLmNs" >> dr1p
echo "b3NlKCkNCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToN" >> dr1p
echo "CiAgICAgICAgcHJpbnQoZiJlcnJvcjoge2V9IikNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAgICBmaWxlbGlzdD1nbG9iKCcqLm1wMycpDQog" >> dr1p
echo "ICAgICAgIGZvciBfIGluIGZpbGVsaXN0OiBvcy5yZW1vdmUoXykNCiAgICBleGNlcHQ6DQogICAg" >> dr1p
echo "ICAgIHBhc3MNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgdHJ5" >> dr1p
echo "Og0KICAgICAgICBsb2dzPVsnYmFuZGNhbXBfZG93bmxvYWRlZC5sb2cnLCdzb3VuZGNsb3VkX2Rv" >> dr1p
echo "d25sb2FkZWQubG9nJywneW91dHViZV9kb3dubG9hZGVkLmxvZycsIFwNCiAgICAgICAgICAgICAg" >> dr1p
echo "J2JhbmRjYW1wX3VybF9iYXRjaC5sb2cnLCdzb3VuZGNsb3VkX3VybF9iYXRjaC5sb2cnLCd5b3V0" >> dr1p
echo "dWJlX3VybF9iYXRjaC5sb2cnXQ0KICAgICAgICBmaWxlbGlzdD1nbG9iKCcqLmxvZycpDQogICAg" >> dr1p
echo "ICAgIGxvZ2ZpbGVzPVtdDQogICAgICAgIGZvciBfIGluIGZpbGVsaXN0Og0KICAgICAgICAgICAg" >> dr1p
echo "Zj1vcGVuKF8sJ3InKQ0KICAgICAgICAgICAgbD1mLnJlYWQoKS5zcGxpdGxpbmVzKCkNCiAgICAg" >> dr1p
echo "ICAgICAgIGYuY2xvc2UoKQ0KICAgICAgICAgICAgbG9nZmlsZXMuYXBwZW5kKFtfLGxdKQ0KICAg" >> dr1p
echo "ICAgICAgICAgaWYgbm90IF8gaW4gbG9nczoNCiAgICAgICAgICAgICAgICBvcy5yZW1vdmUoXykN" >> dr1p
echo "CiAgICBleGNlcHQ6DQogICAgICAgIHBhc3MNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAgICBsb2drZXk9W10NCiAgICAgICAgZm9yIGksXyBp" >> dr1p
echo "biBlbnVtZXJhdGUobG9nZmlsZXMpOg0KICAgICAgICAgICAgaWYgX1swXSA9PSAidXJsX2JhdGNo" >> dr1p
echo "LmxvZyI6DQogICAgICAgICAgICAgICAgbG9na2V5LmFwcGVuZChpKQ0KICAgIGV4Y2VwdDoNCiAg" >> dr1p
echo "ICAgICAgcGFzcw0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0" >> dr1p
echo "cnk6DQogICAgICAgIGZvciBpLF8gaW4gZW51bWVyYXRlKGxvZ2ZpbGVzKToNCiAgICAgICAgICAg" >> dr1p
echo "IGlmIF9bMF0gPT0gInlvdXR1YmVfdXJsX2JhdGNoLmxvZyI6DQogICAgICAgICAgICAgICAgbG9n" >> dr1p
echo "a2V5LmFwcGVuZChpKQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcGFzcw0KICAgICMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAgIGZvciBpLF8gaW4gZW51" >> dr1p
echo "bWVyYXRlKGxvZ2ZpbGVzKToNCiAgICAgICAgICAgIGlmIF9bMF0gPT0gInlvdXR1YmVfZG93bmxv" >> dr1p
echo "YWRlZC5sb2ciOg0KICAgICAgICAgICAgICAgIGxvZ2tleS5hcHBlbmQoaSkNCiAgICBleGNlcHQ6" >> dr1p
echo "DQogICAgICAgIHBhc3MNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog" >> dr1p
echo "ICAgdHJ5Og0KICAgICAgICBmb3IgaSxfIGluIGVudW1lcmF0ZShsb2dmaWxlcyk6DQogICAgICAg" >> dr1p
echo "ICAgICBpZiBfWzBdID09ICJzb3VuZGNsb3VkX3VybF9iYXRjaC5sb2ciOg0KICAgICAgICAgICAg" >> dr1p
echo "ICAgIGxvZ2tleS5hcHBlbmQoaSkNCiAgICBleGNlcHQ6DQogICAgICAgIHBhc3MNCiAgICAjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAgICBmb3IgaSxf" >> dr1p
echo "IGluIGVudW1lcmF0ZShsb2dmaWxlcyk6DQogICAgICAgICAgICBpZiBfWzBdID09ICJzb3VuZGNs" >> dr1p
echo "b3VkX2Rvd25sb2FkZWQubG9nIjoNCiAgICAgICAgICAgICAgICBsb2drZXkuYXBwZW5kKGkpDQog" >> dr1p
echo "ICAgZXhjZXB0Og0KICAgICAgICBwYXNzDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIw0KICAgIHRyeToNCiAgICAgICAgZm9yIGksXyBpbiBlbnVtZXJhdGUobG9nZmlsZXMp" >> dr1p
echo "Og0KICAgICAgICAgICAgaWYgX1swXSA9PSAiYmFuZGNhbXBfdXJsX2JhdGNoLmxvZyI6DQogICAg" >> dr1p
echo "ICAgICAgICAgICAgbG9na2V5LmFwcGVuZChpKQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcGFzcw0K" >> dr1p
echo "ICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAg" >> dr1p
echo "IGZvciBpLF8gaW4gZW51bWVyYXRlKGxvZ2ZpbGVzKToNCiAgICAgICAgICAgIGlmIF9bMF0gPT0g" >> dr1p
echo "ImJhbmRjYW1wX2Rvd25sb2FkZWQubG9nIjoNCiAgICAgICAgICAgICAgICBsb2drZXkuYXBwZW5k" >> dr1p
echo "KGkpDQogICAgZXhjZXB0Og0KICAgICAgICBwYXNzDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIw0KICAgIGxvZ2NtcD1bXTsgbG9nY2xyPVtdOyBwcmludCgnJykNCiAgICAj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgZm9yIGQsXyBpbiBlbnVtZXJh" >> dr1p
echo "dGUobG9na2V5KToNCiAgICAgICAgb2Zmc2V0PWxlbihmIntzdHIoXykuemZpbGwoMil9L3tzdHIo" >> dr1p
echo "bGVuKGxvZ2ZpbGVzKS0xKS56ZmlsbCgyKX0ge2xvZ2ZpbGVzW19dWzBdfSBpRHIxcCIpDQogICAg" >> dr1p
echo "ICAgIGxvZ2Nsci5hcHBlbmQoIlx4MWJbOTBtIikNCiAgICAgICAgbG9nY2xyLmFwcGVuZCgiXHgx" >> dr1p
echo "Yls5MG0iKQ0KICAgICAgICBsb2djbXAuYXBwZW5kKGYiLlNPRi4geycjJyppbnQoMTAwLW9mZnNl" >> dr1p
echo "dCl9IHtsb2dmaWxlc1tfXVswXX0ge3N0cihkKzEpLnpmaWxsKDIpfS97c3RyKGxlbihsb2dmaWxl" >> dr1p
echo "cykpLnpmaWxsKDIpfSIpDQogICAgICAgIGxvZ2NtcC5hcHBlbmQoIiIpDQogICAgICAgIGZvciBf" >> dr1p
echo "XyBpbiByYW5nZShsZW4obG9nZmlsZXNbX11bMV0pKToNCiAgICAgICAgICAgIGxvZ2Nsci5hcHBl" >> dr1p
echo "bmQoIlx4MWJbMzFtIikNCiAgICAgICAgICAgIGxvZ2NtcC5hcHBlbmQoIGYie3N0cihfXysxKS56" >> dr1p
echo "ZmlsbCgyKX0ve3N0cihsZW4obG9nZmlsZXNbX11bMV0pKS56ZmlsbCgyKX0ge2xvZ2ZpbGVzW19d" >> dr1p
echo "WzFdW19fXX0iICkNCiAgICAgICAgbG9nY2xyLmFwcGVuZCgiXHgxYls5MG0iKQ0KICAgICAgICBs" >> dr1p
echo "b2djbHIuYXBwZW5kKCJceDFiWzkwbSIpDQogICAgICAgIGxvZ2Nsci5hcHBlbmQoIlx4MWJbOTBt" >> dr1p
echo "IikNCiAgICAgICAgbG9nY21wLmFwcGVuZCgiIikNCiAgICAgICAgbG9nY21wLmFwcGVuZChmIntz" >> dr1p
echo "dHIoZCsxKS56ZmlsbCgyKX0ve3N0cihsZW4obG9nZmlsZXMpKS56ZmlsbCgyKX0ge2xvZ2ZpbGVz" >> dr1p
echo "W19dWzBdfSB7JyMnKmludCgxMDAtb2Zmc2V0KX0gLkVPRi4iKQ0KICAgICAgICBsb2djbXAuYXBw" >> dr1p
echo "ZW5kKCIiKQ0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICBmPW9w" >> dr1p
echo "ZW4oZid7ZXhwb3J0X2RpcmVjdG9yeX0vX3Byb2Nlc3NlZF9iYXRjaC5sb2cnLCd3JykNCiAgICBm" >> dr1p
echo "b3IgaSxfIGluIGVudW1lcmF0ZShsb2djbXApOg0KICAgICAgICBwcmludChmIntsb2djbHJbaV19" >> dr1p
echo "e199IikNCiAgICAgICAgZi53cml0ZShmJ3tffVxuJykNCiAgICBmLmNsb3NlKCkNCiAgICAjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgcHJpbnQoJ2ZpbmlzaGVkJykNCiMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p
echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRU9GDQo=" >> dr1p
#####################################################################################################################
base64 -d <<< cat dr1p > dp3.py && python3 dp3.py "$PLAYLIST_NAME" "$PLAYLIST_GENRE" "$PLAYLIST_ARTWORK" ############
#####################################################################################################################
cp "$PLAYLIST_ARTWORK" "$PLAYLIST_NAME/$PREFIX$PLAYLIST_NAME/_folder.png" && rm "dr1p" && rm "dp3.py" ###############
#####################################################################################################################
cd "$PLAYLIST_NAME" && ls *.log|grep -v processed|xargs -I {} mv {} "$PREFIX$PLAYLIST_NAME/"___{} && cd .. #########
#####################################################################################################################
mv "$PLAYLIST_NAME/$PREFIX$PLAYLIST_NAME" "." && rm -Rf "$PLAYLIST_NAME" ############################################
#####################################################################################################################
echo -e "\n\033[0;31m[\033[0m DIRECTORY LISTING \033[0;31m]\n"; ls -al "$PREFIX$PLAYLIST_NAME" ######################
#####################################################################################################################
echo -e "\n\033[0;31m[\033[0m PLAYLIST CREATED \033[0;31m]\n"; cat "$PREFIX$PLAYLIST_NAME/_playlist.m3u" ############
#####################################################################################################################
echo "$PLAYLIST_URL" >> "$PREFIX$PLAYLIST_NAME/_processed_batch.log" ################################################
#####################################################################################################################
mv "$PREFIX$PLAYLIST_NAME/_processed_batch.log" "$PREFIX$PLAYLIST_NAME/__processed_batch.log" #######################
#####################################################################################################################
echo -e "\n\033[0;31m[\033[0m ARCHIVING PLAYLIST \033[0;31m]\n" #####################################################
#####################################################################################################################
tar cvfz "dr1p__$PLAYLIST_NAME.tar.gz" "$PREFIX$PLAYLIST_NAME" ######################################################
#####################################################################################################################
echo -e "\n\033[0;31m[\033[0m FILENAME OF PLAYLIST ARCHIVE \033[0;31m]\n" ###########################################
#####################################################################################################################
ls -al "$PREFIX$PLAYLIST_NAME.tar.gz" ###############################################################################
#####################################################################################################################
echo -e "\n\033[0;31m[\033[0m OPERATION COMPLETE \033[0;31m]" #######################################################
################################################################################################# VERSION 2.1 ### EOF