From: unlishema Date: Thu, 17 Oct 2024 08:05:25 +0000 (-0400) Subject: Moved Project X-Git-Url: https://git.slayer.unlishema.org/?a=commitdiff_plain;h=c27c180243cc4b29721ad9b6afacaf3f55b94530;p=slayer.unlishema.org%2F.git Moved Project Moving project over from github --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..074ab52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +package-lock.json +node_modules \ No newline at end of file diff --git a/README.md b/README.md index 345e6ae..81ff4ba 100644 --- a/README.md +++ b/README.md @@ -1 +1,15 @@ -Test +# Minimal Alt1/webpack/typescript example + +how to use +```sh +# to initialize the repo and install dependencies +npm i +# build +npm run build +# alternatively to auto-rebuild when source files are changed +npm run watch +``` + +You can open `./dist/index.html` in your browser and it will give some basic functionality based one pasted images. + +You can also open it in the Alt1 browser and click the `add app` button that appears to get some basic alt1 functionality. \ No newline at end of file diff --git a/dist/aa_10px_mono.fontmeta.json b/dist/aa_10px_mono.fontmeta.json new file mode 100644 index 0000000..844c30f --- /dev/null +++ b/dist/aa_10px_mono.fontmeta.json @@ -0,0 +1 @@ +{"chars":[{"width":4,"bonus":40,"chr":"!","pixels":[1,1,238,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,10,238],"secondary":false},{"width":5,"bonus":30,"chr":"\"","pixels":[1,0,187,1,1,255,2,0,153,2,1,153,3,0,255,3,1,187],"secondary":true},{"width":10,"bonus":160,"chr":"#","pixels":[1,4,238,1,8,255,2,4,255,2,8,255,2,9,221,2,10,255,3,1,153,3,2,187,3,3,221,3,4,255,3,5,255,3,6,204,3,7,170,3,8,255,4,1,153,4,4,255,4,8,255,5,4,255,5,8,255,5,9,204,5,10,255,6,2,187,6,3,221,6,4,255,6,5,255,6,6,221,6,7,187,6,8,255,7,1,153,7,4,255,7,8,255,8,4,255],"secondary":false},{"width":8,"bonus":105,"chr":"$","pixels":[1,2,221,1,3,255,1,4,255,1,9,238,2,1,221,2,2,153,2,5,255,2,10,238,3,0,255,3,1,255,3,5,187,3,6,170,3,10,255,3,11,255,4,1,238,4,6,255,4,10,221,5,2,153,5,7,255,5,8,255,5,9,238],"secondary":false},{"width":10,"bonus":125,"chr":"%","pixels":[1,2,255,1,3,255,1,10,187,2,1,255,2,4,255,2,9,238,3,2,255,3,3,255,3,7,170,3,8,221,4,6,238,5,4,153,5,5,238,5,8,255,5,9,255,6,3,238,6,4,170,6,7,255,6,10,255,7,2,238,7,7,255,7,10,255,8,1,187,8,8,255,8,9,255],"secondary":false},{"width":9,"bonus":150,"chr":"&","pixels":[1,2,204,1,3,255,1,4,204,1,6,204,1,7,255,1,8,255,1,9,204,2,1,204,2,2,170,2,4,153,2,5,255,2,6,187,2,9,187,2,10,187,3,1,255,3,5,255,3,10,255,4,1,255,4,5,255,4,10,255,5,5,255,5,9,204,5,10,170,6,4,255,6,5,255,6,6,255,6,7,255,6,8,238,6,9,153,7,5,255],"secondary":false},{"width":4,"bonus":10,"chr":"'","pixels":[2,1,221,2,2,187],"secondary":true},{"width":4,"bonus":55,"chr":"(","pixels":[1,3,170,1,4,221,1,5,255,1,6,255,1,7,255,1,8,221,1,9,170,2,1,221,2,2,204,2,10,187,2,11,255],"secondary":false},{"width":4,"bonus":55,"chr":")","pixels":[1,1,221,1,2,204,1,10,187,1,11,255,2,3,170,2,4,221,2,5,255,2,6,255,2,7,255,2,8,221,2,9,170],"secondary":false},{"width":7,"bonus":60,"chr":"*","pixels":[1,3,170,2,3,238,2,4,170,2,5,238,3,1,255,3,2,255,3,3,255,3,4,238,4,3,238,4,4,170,4,5,238,5,3,153],"secondary":false},{"width":9,"bonus":65,"chr":"+","pixels":[1,7,255,2,7,255,3,7,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,4,10,255,5,7,255,6,7,255,7,7,255],"secondary":false},{"width":4,"bonus":20,"chr":",","pixels":[1,10,187,1,11,170,2,9,255,2,10,153],"secondary":true},{"width":6,"bonus":20,"chr":"-","pixels":[1,7,255,2,7,255,3,7,255,4,7,170],"secondary":true},{"width":4,"bonus":5,"chr":".","pixels":[1,10,255],"secondary":true},{"width":6,"bonus":55,"chr":"/","pixels":[1,10,187,1,11,187,2,7,204,2,8,255,2,9,187,3,3,170,3,4,255,3,5,221,3,6,153,4,1,255,4,2,204],"secondary":false},{"width":9,"bonus":110,"chr":"0","pixels":[1,3,187,1,4,238,1,5,255,1,6,255,1,7,238,1,8,187,2,2,255,2,9,255,3,1,238,3,10,238,4,1,255,4,10,255,5,1,238,5,10,238,6,2,255,6,9,255,7,3,187,7,4,238,7,5,255,7,6,255,7,7,238,7,8,187],"secondary":false},{"width":7,"bonus":80,"chr":"1","pixels":[1,3,204,1,10,255,2,2,238,2,10,255,3,1,255,3,2,255,3,3,255,3,4,255,3,5,255,3,6,255,3,7,255,3,8,255,3,9,255,3,10,255,4,10,255,5,10,255],"secondary":false},{"width":8,"bonus":110,"chr":"2","pixels":[2,2,255,2,8,204,2,9,255,2,10,255,3,1,204,3,7,221,3,8,170,3,10,255,4,1,255,4,6,204,4,7,170,4,10,255,5,1,221,5,2,153,5,5,187,5,6,204,5,10,255,6,2,221,6,3,255,6,4,255,6,5,170,6,10,255],"secondary":false},{"width":8,"bonus":120,"chr":"3","pixels":[1,9,170,2,1,255,2,9,187,2,10,170,3,1,255,3,5,255,3,10,255,4,1,255,4,3,170,4,4,221,4,5,238,4,10,255,5,1,255,5,2,238,5,3,187,5,5,170,5,6,187,5,9,187,5,10,170,6,1,255,6,6,187,6,7,255,6,8,255,6,9,187],"secondary":false},{"width":9,"bonus":115,"chr":"4","pixels":[1,6,187,1,7,255,2,5,221,2,6,153,2,7,255,3,4,238,3,7,255,4,3,238,4,7,255,5,1,170,5,2,255,5,7,255,6,1,255,6,2,255,6,3,255,6,4,255,6,5,255,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255,7,7,255],"secondary":false},{"width":8,"bonus":120,"chr":"5","pixels":[1,9,153,2,1,255,2,2,255,2,3,255,2,4,221,2,5,255,2,9,153,2,10,187,3,1,255,3,5,255,3,10,255,4,1,255,4,5,255,4,10,255,5,1,255,5,5,187,5,6,187,5,9,187,5,10,170,6,1,170,6,6,187,6,7,255,6,8,255,6,9,187],"secondary":false},{"width":9,"bonus":150,"chr":"6","pixels":[1,4,187,1,5,238,1,6,255,1,7,255,1,8,187,2,2,153,2,3,255,2,4,170,2,5,204,2,6,204,2,8,170,2,9,255,3,2,238,3,5,238,3,10,221,4,1,238,4,5,255,4,10,255,5,1,255,5,5,255,5,10,255,6,1,255,6,5,170,6,6,204,6,9,221,6,10,153,7,6,170,7,7,255,7,8,255,7,9,153],"secondary":false},{"width":9,"bonus":95,"chr":"7","pixels":[1,1,255,2,1,255,2,8,153,2,9,255,2,10,204,3,1,255,3,6,153,3,7,255,3,8,187,4,1,255,4,4,153,4,5,255,4,6,187,5,1,255,5,2,187,5,3,255,5,4,187,6,1,255,6,2,170],"secondary":false},{"width":9,"bonus":170,"chr":"8","pixels":[1,2,204,1,3,255,1,4,204,1,6,153,1,7,255,1,8,255,1,9,153,2,1,187,2,2,187,2,4,187,2,5,255,2,6,204,2,9,221,2,10,153,3,1,255,3,5,255,3,10,255,4,1,255,4,5,170,4,10,255,5,1,204,5,2,153,5,5,204,5,6,204,5,10,238,6,2,238,6,3,255,6,4,255,6,5,170,6,6,255,6,9,221,7,7,238,7,8,255,7,9,153],"secondary":false},{"width":9,"bonus":140,"chr":"9","pixels":[1,3,238,1,4,255,1,5,238,2,2,238,2,6,238,2,10,255,3,1,255,3,7,238,3,10,255,4,1,255,4,7,255,4,10,238,5,1,204,5,2,153,5,7,204,5,9,204,5,10,153,6,2,238,6,3,187,6,6,238,6,7,187,6,8,221,6,9,204,7,3,153,7,4,221,7,5,255,7,6,255,7,7,221],"secondary":false},{"width":3,"bonus":10,"chr":":","pixels":[1,3,255,1,9,255],"secondary":true},{"width":4,"bonus":15,"chr":";","pixels":[2,3,255,2,9,255,2,10,204],"secondary":true},{"width":8,"bonus":60,"chr":"<","pixels":[1,5,187,1,6,238,2,5,255,2,6,204,3,4,170,3,7,204,4,4,255,4,7,238,5,4,170,5,8,187,6,3,187,6,8,204],"secondary":false},{"width":9,"bonus":70,"chr":"=","pixels":[1,6,221,1,8,221,2,6,255,2,8,255,3,6,255,3,8,255,4,6,255,4,8,255,5,6,255,5,8,255,6,6,255,6,8,255,7,6,255,7,8,255],"secondary":false},{"width":8,"bonus":75,"chr":">","pixels":[1,3,153,2,3,153,2,4,170,2,8,255,3,4,255,3,7,187,3,8,170,4,4,170,4,5,153,4,7,255,5,5,255,5,6,187,5,7,153,6,5,170,6,6,255],"secondary":false},{"width":6,"bonus":55,"chr":"?","pixels":[1,1,204,2,1,255,2,6,187,2,7,255,2,10,255,3,1,238,3,5,238,3,6,153,4,2,238,4,3,255,4,4,255],"secondary":false},{"width":10,"bonus":165,"chr":"@","pixels":[1,5,153,1,6,255,1,7,255,1,8,255,1,9,187,2,4,204,2,5,187,2,9,170,2,10,255,3,4,204,3,11,255,4,3,238,4,6,238,4,7,255,4,8,238,4,12,187,5,3,255,5,5,204,5,9,221,5,12,255,6,3,255,6,5,255,6,9,255,7,3,221,7,5,255,7,9,255,8,4,221,8,5,255,8,6,255,8,7,255,8,8,255,8,9,255,9,9,255],"secondary":false},{"width":10,"bonus":140,"chr":"A","pixels":[1,9,153,1,10,238,2,7,221,2,8,255,2,9,204,3,4,204,3,5,255,3,6,204,3,7,255,4,1,187,4,2,255,4,3,204,4,7,255,5,1,238,5,2,255,5,3,187,5,7,255,6,3,153,6,4,238,6,5,255,6,6,187,6,7,255,7,6,153,7,7,255,7,8,255,7,9,170,8,9,187,8,10,255],"secondary":false},{"width":9,"bonus":160,"chr":"B","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,1,255,2,6,255,2,10,255,3,1,255,3,6,255,3,10,255,4,1,255,4,6,255,4,10,255,5,1,221,5,2,153,5,5,170,5,6,255,5,9,153,5,10,204,6,2,238,6,3,255,6,4,255,6,5,204,6,7,238,6,8,255,6,9,238],"secondary":false},{"width":10,"bonus":105,"chr":"C","pixels":[1,3,153,1,4,255,1,5,255,1,6,255,1,7,238,2,2,204,2,3,204,2,8,204,2,9,204,3,2,187,3,9,204,4,1,221,4,10,221,5,1,255,5,10,255,6,1,238,6,10,238,7,1,187,7,10,187,8,2,221,8,9,255],"secondary":false},{"width":10,"bonus":160,"chr":"D","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,1,255,2,10,255,3,1,255,3,10,255,4,1,255,4,10,255,5,1,238,5,10,238,6,1,153,6,2,204,6,9,204,6,10,153,7,2,221,7,3,204,7,8,204,7,9,221,8,3,170,8,4,255,8,5,255,8,6,255,8,7,255,8,8,170],"secondary":false},{"width":8,"bonus":105,"chr":"E","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,1,255,2,6,255,2,10,255,3,1,255,3,6,255,3,10,255,4,1,255,4,6,255,4,10,255,5,1,255,5,10,255],"secondary":false},{"width":7,"bonus":85,"chr":"F","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,1,255,2,6,255,3,1,255,3,6,255,4,1,255,4,6,255,5,1,255],"secondary":false},{"width":10,"bonus":145,"chr":"G","pixels":[1,3,153,1,4,255,1,5,255,1,6,255,1,7,255,1,8,153,2,2,204,2,3,187,2,8,204,2,9,221,3,1,153,3,2,187,3,9,187,3,10,170,4,1,255,4,10,255,5,1,255,5,10,255,6,1,238,6,6,170,6,10,204,7,2,204,7,6,255,7,9,238,8,6,255,8,7,255,8,8,255,8,9,255,8,10,255],"secondary":false},{"width":9,"bonus":125,"chr":"H","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,6,255,3,6,255,4,6,255,5,6,255,6,6,255,7,1,255,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255,7,10,255],"secondary":false},{"width":5,"bonus":70,"chr":"I","pixels":[1,1,255,1,10,255,2,1,255,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,3,1,255,3,10,255],"secondary":false},{"width":8,"bonus":100,"chr":"J","pixels":[1,8,255,1,9,187,2,9,187,2,10,187,3,1,221,3,10,255,4,1,255,4,10,255,5,1,255,5,9,187,5,10,187,6,1,255,6,2,255,6,3,255,6,4,255,6,5,255,6,6,255,6,7,255,6,8,255,6,9,187],"secondary":false},{"width":9,"bonus":120,"chr":"K","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,6,255,3,6,255,4,4,187,4,5,255,4,6,170,4,7,255,5,2,187,5,3,255,5,8,221,5,9,204,6,1,255,6,2,153,6,9,153,6,10,255],"secondary":false},{"width":8,"bonus":75,"chr":"L","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,10,255,3,10,255,4,10,255,5,10,255,6,10,170],"secondary":false},{"width":11,"bonus":180,"chr":"M","pixels":[1,3,170,1,4,170,1,5,204,1,6,221,1,7,238,1,8,255,1,9,255,1,10,255,2,1,255,2,2,255,2,3,255,2,4,170,3,3,204,3,4,255,3,5,170,4,5,153,4,6,255,4,7,221,5,7,221,5,8,255,6,5,187,6,6,255,6,7,187,7,3,221,7,4,238,8,1,255,8,2,255,8,3,255,8,4,187,8,5,153,9,5,170,9,6,187,9,7,204,9,8,221,9,9,238,9,10,255],"secondary":false},{"width":10,"bonus":145,"chr":"N","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,2,238,2,3,221,3,3,170,3,4,255,4,5,221,4,6,204,5,7,255,6,8,204,6,9,221,7,1,255,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255,7,10,255],"secondary":false},{"width":11,"bonus":130,"chr":"O","pixels":[1,4,255,1,5,255,1,6,255,1,7,238,2,2,204,2,3,204,2,8,204,2,9,204,3,2,187,3,9,187,4,1,221,4,10,221,5,1,255,5,10,255,6,1,221,6,10,221,7,2,204,7,9,221,8,2,187,8,3,221,8,8,221,8,9,170,9,4,221,9,5,255,9,6,255,9,7,204],"secondary":false},{"width":9,"bonus":125,"chr":"P","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,1,255,2,7,255,3,1,255,3,7,255,4,1,255,4,7,255,5,1,187,5,2,187,5,6,187,5,7,187,6,2,187,6,3,255,6,4,255,6,5,255,6,6,187],"secondary":false},{"width":11,"bonus":140,"chr":"Q","pixels":[1,4,255,1,5,255,1,6,255,1,7,238,2,2,204,2,3,204,2,8,204,2,9,204,3,2,187,3,9,187,4,1,238,4,10,238,5,1,255,5,10,255,6,1,221,6,10,221,7,2,204,7,8,238,7,9,221,8,2,187,8,3,221,8,8,238,8,9,255,9,4,221,9,5,255,9,6,255,9,7,204,9,10,187],"secondary":false},{"width":9,"bonus":140,"chr":"R","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,1,255,2,6,255,3,1,255,3,6,255,4,1,255,4,6,255,5,1,204,5,2,153,5,5,153,5,6,221,5,7,238,5,8,238,6,2,221,6,3,255,6,4,255,6,5,221,6,9,238,6,10,221],"secondary":false},{"width":7,"bonus":95,"chr":"S","pixels":[1,2,221,1,3,255,1,4,255,1,9,238,2,1,204,2,2,153,2,5,255,2,10,238,3,1,255,3,5,187,3,6,153,3,10,255,4,1,238,4,6,255,4,10,221,5,2,170,5,7,255,5,8,255,5,9,238],"secondary":false},{"width":10,"bonus":80,"chr":"T","pixels":[1,1,255,2,1,255,3,1,255,4,1,255,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,4,10,255,5,1,255,6,1,255,7,1,255],"secondary":false},{"width":10,"bonus":110,"chr":"U","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,238,2,9,238,3,10,204,4,10,255,5,10,255,6,10,204,7,9,238,8,1,255,8,2,255,8,3,255,8,4,255,8,5,255,8,6,255,8,7,255,8,8,221],"secondary":false},{"width":10,"bonus":110,"chr":"V","pixels":[1,1,238,1,2,153,2,2,187,2,3,255,2,4,221,3,5,187,3,6,255,3,7,204,4,8,204,4,9,255,4,10,204,5,8,204,5,9,255,5,10,204,6,5,187,6,6,255,6,7,204,7,2,187,7,3,255,7,4,221,8,1,238,8,2,153],"secondary":false},{"width":13,"bonus":195,"chr":"W","pixels":[1,1,255,1,2,187,2,3,187,2,4,255,2,5,255,2,6,204,3,7,170,3,8,221,3,9,255,3,10,221,4,7,170,4,8,238,4,9,255,4,10,187,5,3,187,5,4,255,5,5,255,5,6,187,6,1,255,6,2,255,6,3,255,7,3,170,7,4,238,7,5,255,7,6,204,8,7,153,8,8,221,8,9,255,8,10,204,9,7,187,9,8,255,9,9,255,9,10,204,10,3,204,10,4,255,10,5,255,10,6,187,11,1,255,11,2,187],"secondary":false},{"width":9,"bonus":125,"chr":"X","pixels":[1,1,221,1,10,255,2,1,153,2,2,255,2,3,187,2,8,238,2,9,221,3,3,170,3,4,255,3,5,153,3,6,204,3,7,238,4,4,187,4,5,255,4,6,255,5,3,238,5,4,221,5,7,255,5,8,170,6,1,221,6,2,238,6,8,187,6,9,255,7,1,153,7,10,221],"secondary":false},{"width":9,"bonus":80,"chr":"Y","pixels":[1,1,238,2,2,238,2,3,204,3,4,255,3,5,187,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,4,10,255,5,4,238,5,5,204,6,2,221,6,3,238,7,1,255],"secondary":false},{"width":9,"bonus":115,"chr":"Z","pixels":[1,10,170,2,1,255,2,8,153,2,9,255,2,10,255,3,1,255,3,7,238,3,8,221,3,10,255,4,1,255,4,5,187,4,6,255,4,10,255,5,1,255,5,4,255,5,5,187,5,10,255,6,1,255,6,2,204,6,3,221,6,10,255,7,1,255,7,10,255],"secondary":false},{"width":4,"bonus":65,"chr":"[","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,1,11,255,2,1,255,2,11,255],"secondary":false},{"width":6,"bonus":50,"chr":"\\","pixels":[1,1,238,1,2,255,1,3,170,2,4,221,2,5,255,2,6,187,3,7,204,3,8,255,3,9,187,4,10,204],"secondary":false},{"width":3,"bonus":65,"chr":"]","pixels":[0,1,255,0,11,255,1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,1,11,255],"secondary":false},{"width":8,"bonus":55,"chr":"^","pixels":[1,6,170,2,4,221,2,5,238,3,2,255,3,3,187,4,1,187,4,2,255,4,3,153,5,4,255,5,5,204,6,6,204],"secondary":false},{"width":9,"bonus":35,"chr":"_","pixels":[1,11,255,2,11,255,3,11,255,4,11,255,5,11,255,6,11,255,7,11,255],"secondary":false},{"width":8,"bonus":110,"chr":"a","pixels":[1,8,221,1,9,255,2,4,187,2,7,170,2,8,153,2,10,221,3,4,255,3,7,221,3,10,255,4,4,255,4,7,255,4,10,238,5,4,204,5,5,170,5,7,255,5,9,204,6,5,204,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255],"secondary":false},{"width":8,"bonus":135,"chr":"b","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,4,153,2,5,221,2,9,221,2,10,153,3,4,238,3,10,238,4,4,255,4,10,255,5,4,187,5,5,187,5,9,187,5,10,170,6,5,187,6,6,255,6,7,255,6,8,255,6,9,170],"secondary":false},{"width":8,"bonus":60,"chr":"c","pixels":[1,6,255,1,7,255,1,8,255,2,5,221,2,9,221,3,4,238,3,10,238,4,4,255,4,10,255,5,4,221,5,10,221,6,9,204],"secondary":false},{"width":8,"bonus":135,"chr":"d","pixels":[1,5,170,1,6,255,1,7,255,1,8,255,1,9,187,2,4,170,2,5,187,2,9,187,2,10,170,3,4,255,3,10,255,4,4,238,4,10,238,5,4,153,5,5,221,5,9,221,5,10,153,6,1,255,6,2,255,6,3,255,6,4,255,6,5,255,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255],"secondary":false},{"width":8,"bonus":100,"chr":"e","pixels":[1,6,255,1,7,255,1,8,255,1,9,153,2,5,204,2,7,255,2,9,204,3,4,255,3,7,255,3,10,238,4,4,255,4,7,255,4,10,255,5,4,170,5,5,187,5,7,255,5,10,221,6,5,153,6,6,238,6,7,255],"secondary":false},{"width":6,"bonus":70,"chr":"f","pixels":[1,4,221,2,2,221,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,3,1,221,3,4,255,4,1,255,4,4,221],"secondary":false},{"width":8,"bonus":135,"chr":"g","pixels":[1,5,187,1,6,255,1,7,255,1,8,255,1,9,187,2,4,204,2,5,170,2,9,170,2,10,221,2,13,238,3,4,255,3,10,255,3,13,255,4,4,187,4,5,153,4,10,204,4,12,170,4,13,187,5,4,255,5,5,255,5,6,255,5,7,255,5,8,255,5,9,255,5,10,255,5,11,255,5,12,204],"secondary":false},{"width":9,"bonus":100,"chr":"h","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,5,238,3,4,204,4,4,255,5,4,238,6,5,255,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255],"secondary":false},{"width":4,"bonus":40,"chr":"i","pixels":[1,1,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255],"secondary":false},{"width":5,"bonus":60,"chr":"j","pixels":[0,13,221,1,13,238,2,1,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,255,2,12,255],"secondary":false},{"width":7,"bonus":100,"chr":"k","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,7,255,3,6,187,3,7,255,3,8,170,4,5,255,4,6,170,4,8,187,4,9,221,5,4,255,5,10,255],"secondary":false},{"width":5,"bonus":50,"chr":"l","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,10,255],"secondary":false},{"width":12,"bonus":130,"chr":"m","pixels":[1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,5,238,3,4,204,4,4,255,5,4,221,6,5,238,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255,7,5,204,8,4,255,9,4,255,10,5,255,10,6,255,10,7,255,10,8,255,10,9,255,10,10,255],"secondary":false},{"width":8,"bonus":85,"chr":"n","pixels":[1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,5,238,3,4,204,4,4,255,5,4,238,6,5,255,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255],"secondary":false},{"width":9,"bonus":80,"chr":"o","pixels":[1,6,255,1,7,255,1,8,255,2,5,221,2,9,221,3,4,221,3,10,221,4,4,255,4,10,255,5,4,221,5,10,221,6,5,238,6,9,238,7,6,221,7,7,255,7,8,221],"secondary":false},{"width":8,"bonus":130,"chr":"p","pixels":[1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,1,11,255,1,12,255,2,4,153,2,5,204,2,9,221,2,10,153,3,4,238,3,10,238,4,4,255,4,10,255,5,4,187,5,5,187,5,9,187,5,10,170,6,5,187,6,6,255,6,7,255,6,8,255,6,9,170],"secondary":false},{"width":8,"bonus":130,"chr":"q","pixels":[1,5,170,1,6,255,1,7,255,1,8,255,1,9,187,2,4,170,2,5,187,2,9,187,2,10,187,3,4,255,3,10,255,4,4,238,4,10,238,5,4,153,5,5,204,5,9,221,5,10,153,6,4,255,6,5,255,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255,6,11,255,6,12,255],"secondary":false},{"width":6,"bonus":45,"chr":"r","pixels":[1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,2,5,238,3,4,238],"secondary":false},{"width":6,"bonus":65,"chr":"s","pixels":[1,5,255,1,6,255,1,9,153,1,10,170,2,4,255,2,7,221,2,10,255,3,4,255,3,7,238,3,10,255,4,4,153,4,8,255,4,9,255],"secondary":false},{"width":5,"bonus":65,"chr":"t","pixels":[0,4,255,1,2,238,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,221,2,4,255,2,10,221,3,4,221,3,10,255],"secondary":false},{"width":9,"bonus":85,"chr":"u","pixels":[1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,238,2,10,221,3,10,255,4,10,221,5,9,221,6,4,255,6,5,255,6,6,255,6,7,255,6,8,255,6,9,255,6,10,255],"secondary":false},{"width":8,"bonus":75,"chr":"v","pixels":[1,4,238,2,5,187,2,6,255,2,7,204,3,8,221,3,9,255,3,10,170,4,8,153,4,9,255,4,10,238,5,6,221,5,7,255,5,8,170,6,4,255,6,5,204],"secondary":false},{"width":12,"bonus":135,"chr":"w","pixels":[1,4,238,1,5,153,2,5,170,2,6,255,2,7,238,2,8,153,3,8,153,3,9,255,3,10,255,4,8,204,4,9,255,4,10,170,5,5,187,5,6,255,5,7,187,6,5,255,6,6,221,7,7,187,7,8,255,7,9,187,8,9,255,8,10,255,9,6,187,9,7,255,9,8,221,10,4,255,10,5,204],"secondary":false},{"width":8,"bonus":90,"chr":"x","pixels":[1,4,153,1,10,221,2,4,204,2,5,238,2,9,255,2,10,153,3,6,238,3,7,238,3,8,221,4,6,238,4,7,238,4,8,221,5,4,204,5,5,238,5,9,255,5,10,153,6,4,153,6,10,221],"secondary":false},{"width":9,"bonus":100,"chr":"y","pixels":[1,4,238,1,13,204,2,5,221,2,6,255,2,7,170,2,13,255,3,7,153,3,8,238,3,9,238,3,12,238,3,13,153,4,9,255,4,10,255,4,11,187,5,6,170,5,7,255,5,8,221,6,4,238,6,5,255,6,6,170],"secondary":false},{"width":8,"bonus":95,"chr":"z","pixels":[1,4,255,1,10,255,2,4,255,2,8,187,2,9,255,2,10,255,3,4,255,3,7,221,3,8,187,3,10,255,4,4,255,4,6,238,4,7,153,4,10,255,5,4,255,5,5,255,5,10,255,6,4,238,6,10,255],"secondary":false},{"width":6,"bonus":55,"chr":"{","pixels":[1,6,255,2,2,255,2,3,255,2,4,255,2,5,221,2,7,238,2,8,255,2,9,255,2,10,255,3,1,255,3,11,255],"secondary":false},{"width":4,"bonus":60,"chr":"|","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,1,10,255,1,11,255,1,12,255],"secondary":false},{"width":5,"bonus":55,"chr":"}","pixels":[1,1,255,1,11,255,2,2,221,2,3,255,2,4,255,2,5,238,2,7,255,2,8,255,2,9,255,2,10,221,3,6,255],"secondary":false},{"width":8,"bonus":30,"chr":"~","pixels":[1,6,238,2,5,255,3,5,238,4,6,238,5,6,255,6,5,238],"secondary":false}],"width":13,"spacewidth":3,"shadow":false,"height":14,"basey":10} \ No newline at end of file diff --git a/dist/aa_8px_mono.fontmeta.json b/dist/aa_8px_mono.fontmeta.json new file mode 100644 index 0000000..55df159 --- /dev/null +++ b/dist/aa_8px_mono.fontmeta.json @@ -0,0 +1 @@ +{"chars":[{"width":7,"bonus":75,"chr":"a","pixels":[0,7,187,1,3,221,1,6,170,1,8,255,2,3,255,2,5,187,2,8,255,3,3,255,3,5,255,3,8,221,4,4,238,4,5,255,4,6,204,4,7,255,4,8,238],"secondary":false},{"width":7,"bonus":105,"chr":"b","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,204,1,4,170,1,7,170,1,8,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,170,4,4,170,4,7,170,5,5,187,5,6,187],"secondary":false},{"width":7,"bonus":50,"chr":"c","pixels":[0,5,170,0,6,187,1,4,187,1,7,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,221,4,8,221],"secondary":false},{"width":7,"bonus":105,"chr":"d","pixels":[0,5,187,0,6,187,1,4,170,1,7,170,1,8,170,2,3,255,2,8,255,3,3,255,3,8,255,4,3,204,4,4,170,4,7,170,4,8,187,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,221,5,7,221,5,8,204],"secondary":false},{"width":7,"bonus":75,"chr":"e","pixels":[0,5,187,0,6,170,1,4,187,1,5,255,1,7,204,2,3,255,2,5,255,2,8,255,3,3,255,3,5,255,3,8,255,4,3,187,4,5,255,4,8,221,5,5,204],"secondary":false},{"width":4,"bonus":50,"chr":"f","pixels":[0,3,204,1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204,2,1,255,2,3,255],"secondary":false},{"width":7,"bonus":115,"chr":"g","pixels":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,170,1,11,153,2,3,255,2,8,255,2,11,238,3,3,255,3,8,255,3,11,221,4,3,221,4,7,153,4,8,221,4,10,204,5,3,204,5,4,221,5,5,221,5,6,221,5,7,221,5,8,221,5,9,170],"secondary":false},{"width":7,"bonus":90,"chr":"h","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,170,1,4,204,2,3,255,3,3,255,4,3,170,4,4,221,4,5,221,4,6,221,4,7,221,4,8,204],"secondary":false},{"width":3,"bonus":35,"chr":"i","pixels":[0,1,238,0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204],"secondary":false},{"width":4,"bonus":50,"chr":"j","pixels":[0,11,153,1,11,170,2,1,204,2,3,204,2,4,221,2,5,221,2,6,221,2,7,221,2,8,221,2,9,221],"secondary":false},{"width":6,"bonus":70,"chr":"k","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,4,153,2,5,255,2,6,221,3,3,204,3,7,221],"secondary":false},{"width":3,"bonus":40,"chr":"l","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,1,8,255],"secondary":false},{"width":10,"bonus":115,"chr":"m","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,153,4,4,255,4,5,221,4,6,221,4,7,221,4,8,204,5,4,187,6,3,255,7,3,238,8,4,170,8,5,221,8,6,221,8,7,221,8,8,204],"secondary":false},{"width":7,"bonus":75,"chr":"n","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,238,5,4,170,5,5,221,5,6,221,5,7,221,5,8,204],"secondary":false},{"width":8,"bonus":70,"chr":"o","pixels":[0,5,187,0,6,170,1,4,204,1,7,221,2,3,238,2,8,238,3,3,255,3,8,255,4,3,238,4,8,255,5,4,204,5,7,221,6,5,170,6,6,170],"secondary":false},{"width":6,"bonus":90,"chr":"p","pixels":[0,3,238,0,4,255,0,5,187,0,6,204,0,7,255,0,8,221,0,9,221,0,10,221,1,3,255,1,8,238,2,3,255,2,8,255,3,3,238,3,8,238,4,4,238,4,5,255,4,6,255,4,7,238],"secondary":false},{"width":7,"bonus":90,"chr":"q","pixels":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,153,1,8,170,2,3,255,2,8,255,3,3,238,3,8,238,4,3,255,4,4,255,4,5,187,4,6,187,4,7,255,4,8,238,4,9,221,4,10,221],"secondary":false},{"width":4,"bonus":45,"chr":"r","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,187,1,4,204,2,3,255],"secondary":false},{"width":6,"bonus":50,"chr":"s","pixels":[0,4,187,1,3,255,1,5,238,1,8,255,2,3,255,2,8,255,3,3,255,3,6,238,3,8,255,4,7,187],"secondary":false},{"width":5,"bonus":45,"chr":"t","pixels":[1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,170,2,3,255,2,8,238,3,8,153],"secondary":false},{"width":6,"bonus":70,"chr":"u","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,170,1,8,238,2,8,255,3,8,204,4,3,204,4,4,221,4,5,221,4,6,204,4,7,255,4,8,221],"secondary":false},{"width":6,"bonus":50,"chr":"v","pixels":[0,3,238,1,5,238,1,6,204,2,7,255,2,8,255,3,5,153,3,6,255,3,7,153,4,3,238,4,4,204],"secondary":false},{"width":10,"bonus":95,"chr":"w","pixels":[1,3,153,1,4,238,1,5,187,2,6,153,2,7,238,2,8,187,3,6,204,3,7,238,3,8,153,4,3,170,4,4,255,5,4,221,5,5,221,6,7,255,6,8,221,7,6,238,7,7,204,8,3,238,8,4,204],"secondary":false},{"width":6,"bonus":55,"chr":"x","pixels":[0,8,170,1,3,170,1,4,204,1,7,221,2,5,255,2,6,238,3,4,255,3,6,187,3,7,187,4,3,221,4,8,255],"secondary":false},{"width":6,"bonus":65,"chr":"y","pixels":[0,3,255,0,4,153,0,11,221,1,5,204,1,6,221,1,11,187,2,7,187,2,8,255,2,9,238,3,6,238,3,7,187,4,3,204,4,4,221],"secondary":false},{"width":6,"bonus":70,"chr":"z","pixels":[0,3,153,0,8,204,1,3,255,1,7,221,1,8,255,2,3,255,2,6,255,2,8,255,3,3,255,3,4,170,3,5,170,3,8,255,4,3,255,4,8,255],"secondary":false},{"width":8,"bonus":85,"chr":"A","pixels":[0,8,153,1,6,221,1,7,238,2,3,170,2,4,255,2,5,187,2,6,255,3,1,255,3,2,255,3,6,255,4,2,255,4,3,238,4,6,255,5,5,255,5,6,255,6,7,187,6,8,255],"secondary":false},{"width":7,"bonus":125,"chr":"B","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,4,255,1,8,255,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,1,221,4,4,255,4,5,170,4,8,204,5,2,170,5,3,170,5,6,187,5,7,153],"secondary":false},{"width":9,"bonus":80,"chr":"C","pixels":[0,4,187,0,5,187,1,2,221,1,3,153,1,6,153,1,7,204,2,1,170,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,170,6,8,170],"secondary":false},{"width":8,"bonus":100,"chr":"D","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,8,255,2,1,255,2,8,255,3,1,255,3,8,255,4,1,204,4,8,204,5,2,221,5,7,221,6,4,187,6,5,187],"secondary":false},{"width":6,"bonus":95,"chr":"E","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,1,8,255,2,1,255,2,5,255,2,8,255,3,1,255,3,5,255,3,8,255,4,1,153,4,8,221],"secondary":false},{"width":6,"bonus":70,"chr":"F","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255],"secondary":false},{"width":9,"bonus":105,"chr":"G","pixels":[0,4,170,0,5,187,1,2,204,1,3,153,1,7,221,2,1,170,2,8,187,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,238,6,1,170,6,5,255,6,7,153,6,8,170,7,5,153,7,6,221,7,7,221,7,8,204],"secondary":false},{"width":8,"bonus":105,"chr":"H","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,5,255,3,5,255,4,5,255,5,5,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],"secondary":false},{"width":4,"bonus":60,"chr":"I","pixels":[0,1,192,0,8,191,1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,2,1,192,2,8,191],"secondary":false},{"width":6,"bonus":70,"chr":"J","pixels":[0,6,153,0,7,153,1,8,204,2,1,221,2,8,255,3,1,255,3,8,204,4,1,204,4,2,221,4,3,221,4,4,221,4,5,221,4,6,221,4,7,153],"secondary":false},{"width":7,"bonus":85,"chr":"K","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,255,2,4,255,3,3,221,3,5,170,3,6,204,4,1,204,4,2,153,4,7,238,4,8,153],"secondary":false},{"width":6,"bonus":60,"chr":"L","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,8,255,2,8,255,3,8,255,4,8,255],"secondary":false},{"width":9,"bonus":130,"chr":"M","pixels":[0,1,245,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,1,2,170,1,3,225,2,4,207,2,5,190,3,6,232,4,6,232,5,4,207,5,5,190,6,2,170,6,3,224,7,1,245,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255],"secondary":false},{"width":8,"bonus":110,"chr":"N","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,2,255,2,3,221,3,4,187,3,5,187,4,6,221,5,7,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],"secondary":false},{"width":10,"bonus":110,"chr":"O","pixels":[0,4,187,0,5,170,1,2,204,1,3,153,1,6,170,1,7,204,2,1,153,2,8,153,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,153,6,8,153,7,2,204,7,3,153,7,6,170,7,7,204,8,4,187,8,5,170],"secondary":false},{"width":7,"bonus":85,"chr":"P","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,4,1,187,4,5,187,5,3,221],"secondary":false},{"width":9,"bonus":100,"chr":"Q","pixels":[0,4,187,0,5,187,1,2,221,1,6,153,1,7,221,2,1,187,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,238,5,8,238,6,2,204,6,7,255,7,3,255,7,4,204,7,5,221,7,6,255,7,8,204],"secondary":false},{"width":7,"bonus":100,"chr":"R","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,3,6,187,4,2,238,4,3,204,4,4,255,4,7,238,4,8,170],"secondary":false},{"width":6,"bonus":70,"chr":"S","pixels":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,1,255,2,4,170,2,8,255,3,1,255,3,5,255,3,8,255,4,1,170,4,6,221,4,7,238],"secondary":false},{"width":8,"bonus":65,"chr":"T","pixels":[0,1,255,1,1,255,2,1,255,3,1,255,3,2,221,3,3,221,3,4,221,3,5,221,3,6,221,3,7,221,3,8,204,4,1,255,5,1,255],"secondary":false},{"width":8,"bonus":85,"chr":"U","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,187,1,7,170,2,8,255,3,8,255,4,8,221,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,255,5,7,238],"secondary":false},{"width":7,"bonus":70,"chr":"V","pixels":[0,1,255,0,2,187,1,3,153,1,4,255,1,5,153,2,6,187,2,7,238,3,7,255,3,8,204,4,4,204,4,5,238,5,1,170,5,2,255,5,3,153],"secondary":false},{"width":10,"bonus":125,"chr":"W","pixels":[0,1,255,0,2,221,1,4,187,1,5,255,1,6,204,2,7,255,2,8,255,3,3,153,3,4,238,3,5,221,4,1,255,4,2,255,4,3,153,5,3,170,5,4,238,5,5,204,6,7,255,6,8,255,7,4,153,7,5,238,7,6,238,7,7,153,8,1,238,8,2,238,8,3,153],"secondary":false},{"width":7,"bonus":75,"chr":"X","pixels":[0,8,170,1,1,187,1,2,204,1,7,238,2,3,221,2,4,153,2,5,255,2,6,153,3,4,255,3,5,238,4,2,238,4,6,204,4,7,170,5,1,204,5,8,255],"secondary":false},{"width":7,"bonus":55,"chr":"Y","pixels":[0,1,170,1,2,238,2,3,153,2,4,255,3,4,221,3,5,204,3,6,221,3,7,221,3,8,204,4,3,255,5,1,238],"secondary":false},{"width":7,"bonus":75,"chr":"Z","pixels":[0,8,187,1,1,255,1,7,221,1,8,255,2,1,255,2,5,204,2,8,255,3,1,255,3,4,204,3,8,255,4,1,255,4,2,221,4,8,255,5,1,187,5,8,153],"secondary":false},{"width":7,"bonus":90,"chr":"0","pixels":[0,2,153,0,3,221,0,4,255,0,5,255,0,6,238,0,7,170,1,1,187,1,8,204,2,1,187,2,8,187,3,1,221,3,8,204,4,2,170,4,3,255,4,4,187,4,5,187,4,6,238,4,7,170],"secondary":false},{"width":7,"bonus":50,"chr":"1","pixels":[1,8,187,2,1,204,2,2,204,2,3,187,2,4,187,2,5,187,2,6,187,2,7,187,2,8,238,3,8,204],"secondary":false},{"width":7,"bonus":55,"chr":"2","pixels":[1,8,255,2,1,187,2,6,153,2,8,187,3,1,204,3,5,153,3,8,187,4,1,187,4,2,153,4,4,204,4,8,187],"secondary":false},{"width":7,"bonus":50,"chr":"3","pixels":[0,8,204,1,1,187,1,8,187,2,1,187,2,4,187,2,8,204,3,2,221,3,3,204,3,5,204,3,7,170],"secondary":false},{"width":7,"bonus":80,"chr":"4","pixels":[0,6,238,1,4,187,1,6,187,2,3,170,2,6,187,3,1,187,3,2,153,3,6,204,4,1,187,4,2,187,4,3,187,4,4,187,4,5,187,4,6,238,4,7,187,4,8,187],"secondary":false},{"width":7,"bonus":70,"chr":"5","pixels":[1,1,238,1,2,187,1,3,187,1,4,187,1,8,204,2,1,187,2,4,187,2,8,187,3,1,187,3,4,204,3,8,204,4,5,238,4,6,187,4,7,221],"secondary":false},{"width":7,"bonus":80,"chr":"6","pixels":[0,3,170,0,4,255,0,5,255,0,6,238,0,7,153,1,2,187,1,8,187,2,1,204,2,4,187,2,8,187,3,1,187,3,4,204,3,8,187,4,5,221,4,6,255,4,7,187],"secondary":false},{"width":7,"bonus":55,"chr":"7","pixels":[0,1,187,1,1,187,1,8,204,2,1,187,2,6,238,2,7,153,3,1,187,3,3,153,3,4,221,4,1,255,4,2,187],"secondary":false},{"width":7,"bonus":95,"chr":"8","pixels":[1,2,238,1,3,221,1,6,204,1,7,221,2,1,204,2,4,204,2,5,170,2,8,221,3,1,187,3,4,170,3,8,187,4,1,221,4,4,170,4,5,204,4,8,187,5,2,170,5,3,153,5,6,238,5,7,238],"secondary":false},{"width":7,"bonus":85,"chr":"9","pixels":[1,2,221,1,3,187,1,4,238,1,8,153,2,1,204,2,5,221,2,8,187,3,1,187,3,5,187,3,8,204,4,1,187,4,7,170,5,2,153,5,3,238,5,4,255,5,5,255,5,6,187],"secondary":false},{"width":8,"bonus":75,"chr":"%","pixels":[0,3,255,0,8,255,1,2,255,1,4,255,1,7,255,2,3,255,2,6,255,3,5,255,4,4,255,4,7,255,5,3,255,5,6,255,5,8,255,6,2,255,6,7,255],"secondary":false},{"width":4,"bonus":40,"chr":"/","pixels":[0,7,153,0,8,238,0,9,221,1,4,187,1,5,238,1,6,170,2,1,221,2,2,221],"secondary":false},{"width":7,"bonus":60,"chr":"+","pixels":[0,5,221,1,5,255,2,5,255,3,2,153,3,3,221,3,4,221,3,5,255,3,6,221,3,7,221,3,8,204,4,5,255,5,5,255],"secondary":false},{"width":5,"bonus":40,"chr":"?","pixels":[0,1,170,1,1,255,1,6,221,1,8,255,2,1,255,2,5,170,3,2,255,3,3,221],"secondary":false},{"width":2,"bonus":35,"chr":"!","pixels":[0,1,170,0,2,187,0,3,187,0,4,187,0,5,187,0,6,170,0,8,255],"secondary":false},{"width":8,"bonus":130,"chr":"@","pixels":[0,4,255,0,5,255,0,6,221,0,7,255,0,8,187,1,3,221,1,9,238,2,2,221,2,5,255,2,6,238,2,7,255,2,10,153,3,2,255,3,4,255,3,8,204,3,10,187,4,2,238,4,4,255,4,8,255,5,3,238,5,4,255,5,5,221,5,6,221,5,7,221,5,8,238,6,8,221],"secondary":false},{"width":8,"bonus":120,"chr":"#","pixels":[0,6,255,1,3,255,1,6,255,1,7,170,1,8,238,2,1,170,2,2,238,2,3,255,2,4,221,2,5,170,2,6,255,3,3,255,3,6,255,4,3,255,4,4,153,4,5,204,4,6,255,4,7,238,4,8,187,5,1,255,5,2,187,5,3,255,5,6,255,6,3,255],"secondary":false},{"width":6,"bonus":70,"chr":"$","pixels":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,0,204,2,1,238,2,8,238,2,9,204,3,1,238,3,5,238,3,8,255,4,6,170,4,7,170],"secondary":false},{"width":6,"bonus":40,"chr":"^","pixels":[0,4,153,0,5,238,1,2,204,1,3,221,2,1,221,2,2,221,3,3,187,3,4,221],"secondary":false},{"width":6,"bonus":20,"chr":"~","pixels":[1,5,255,2,5,221,3,6,221,4,5,204],"secondary":false},{"width":7,"bonus":95,"chr":"&","pixels":[0,6,187,1,2,238,1,3,255,1,4,187,1,5,187,1,8,187,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,4,255,4,8,187,5,3,204,5,4,255,5,5,221,5,6,187,6,4,153],"secondary":false},{"width":6,"bonus":45,"chr":"*","pixels":[0,2,170,1,2,170,1,3,204,1,4,255,2,1,204,2,2,238,2,3,255,3,2,170,3,4,153],"secondary":false},{"width":4,"bonus":55,"chr":"(","pixels":[0,3,173,0,4,239,0,5,253,0,6,230,0,7,171,1,1,194,1,2,204,1,8,204,1,9,191,2,0,210,2,10,216],"secondary":false},{"width":4,"bonus":55,"chr":")","pixels":[1,0,211,1,10,216,2,1,194,2,2,203,2,8,203,2,9,191,3,3,174,3,4,240,3,5,253,3,6,229,3,7,171],"secondary":false},{"width":7,"bonus":30,"chr":"_","pixels":[0,9,153,1,9,255,2,9,255,3,9,255,4,9,255,5,9,255],"secondary":false},{"width":4,"bonus":15,"chr":"-","pixels":[0,5,255,1,5,255,2,5,255],"secondary":true},{"width":8,"bonus":50,"chr":"=","pixels":[0,4,255,0,6,255,1,4,255,1,6,255,2,4,255,2,6,255,3,4,255,3,6,255,4,4,255,4,6,255],"secondary":false},{"width":3,"bonus":55,"chr":"[","pixels":[0,0,204,0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,0,238,1,8,238],"secondary":false},{"width":3,"bonus":55,"chr":"]","pixels":[0,0,238,0,8,238,1,0,204,1,1,221,1,2,221,1,3,221,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204],"secondary":false},{"width":5,"bonus":50,"chr":"{","pixels":[0,5,153,1,2,170,1,3,221,1,4,221,1,5,204,1,6,255,1,7,221,1,8,170,2,1,238,2,9,238],"secondary":false},{"width":5,"bonus":50,"chr":"}","pixels":[1,1,238,1,9,238,2,2,170,2,3,221,2,4,221,2,5,204,2,6,255,2,7,221,2,8,170,3,5,153],"secondary":false},{"width":3,"bonus":10,"chr":":","pixels":[1,3,255,1,7,255],"secondary":true},{"width":3,"bonus":20,"chr":";","pixels":[0,9,201,1,3,255,1,7,241,1,8,255],"secondary":true},{"width":3,"bonus":20,"chr":"\"","pixels":[0,1,255,0,2,255,2,1,255,2,2,255],"secondary":true},{"width":2,"bonus":10,"chr":"'","pixels":[0,1,255,0,2,177],"secondary":true},{"width":7,"bonus":40,"chr":"<","pixels":[0,5,204,1,5,255,2,4,238,2,6,238,3,4,170,3,6,170,4,3,221,4,7,221],"secondary":false},{"width":7,"bonus":45,"chr":">","pixels":[0,3,204,0,7,204,1,7,187,2,4,238,2,6,255,3,4,170,3,5,153,3,6,204,4,5,255],"secondary":false},{"width":5,"bonus":35,"chr":"\\","pixels":[1,1,153,1,2,255,1,3,204,2,5,255,2,6,204,3,8,255,3,9,204],"secondary":false},{"width":2,"bonus":5,"chr":".","pixels":[0,8,255],"secondary":true},{"width":3,"bonus":15,"chr":",","pixels":[0,9,205,1,7,205,1,8,255],"secondary":true},{"width":3,"bonus":50,"chr":"|","pixels":[0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,221,0,9,221,0,10,204],"secondary":false}],"width":10,"spacewidth":3,"shadow":false,"height":12,"basey":8} \ No newline at end of file diff --git a/dist/appconfig.json b/dist/appconfig.json new file mode 100644 index 0000000..ae52cb6 --- /dev/null +++ b/dist/appconfig.json @@ -0,0 +1,18 @@ +{ + "appName": "Slayer Assistant", + "description": "Slayer Assistant is your go-to tool for efficient Slayer tasks in RuneScape. Designed for the Alt1 Toolkit, it provides instant access to task information, helping you make informed decisions quickly. Whether you're a new player or an experienced Slayer, this app streamlines the task selection process, making your gameplay smoother and more enjoyable.", + "appUrl": "https://slayer.unlishema.org/", + "configUrl": "https://slayer.unlishema.org/appconfig.json", + "iconUrl": "https://slayer.unlishema.org/images/icon.png", + "defaultWidth": 360, + "defaultHeight": 395, + "minWidth": 360, + "minHeight": 142, + "maxWidth": 400, + "maxHeight": 550, + "requestHandlers": [], + "activators": [ + "regex:^Get task .*" + ], + "permissions": "pixel,gamestate,overlay" +} diff --git a/dist/data/.htaccess b/dist/data/.htaccess new file mode 100644 index 0000000..6996f3c --- /dev/null +++ b/dist/data/.htaccess @@ -0,0 +1,10 @@ +# Enable mod_rewrite +RewriteEngine On + +# Apply rules inside the /data/ folder +RewriteBase /data/ + +# Rewrite any URL ending with .json to load the corresponding .php file +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)\.json$ $1.php [L] diff --git a/dist/data/assignments.php b/dist/data/assignments.php new file mode 100644 index 0000000..6f7b9a3 --- /dev/null +++ b/dist/data/assignments.php @@ -0,0 +1,67 @@ + $message]); + exit; +} + +// Create connection +$mysqli = new mysqli($host, $user, $pass, $db); +if ($mysqli->connect_error) { + respondWithError("Connection failed: " . $mysqli->connect_error); +} + +// Check for the 'q' query parameter +$q = $_GET['q'] ?? 'all'; // Default to 'all' + +// Prepare SQL query +$query = $q === 'all' ? "SELECT * FROM assignments" : "SELECT * FROM assignments WHERE `index` = ?"; +$stmt = $mysqli->prepare($query); +if ($stmt === false) { + respondWithError("Prepare failed: " . $mysqli->error); +} +if ($q !== 'all') { + $stmt->bind_param("s", $q); +} +$stmt->execute(); +$result = $stmt->get_result(); +$data = []; + +// Helper function to process multiline string into array +function parseLines($string) { + return array_filter(array_map('trim', explode("\r\n", $string))); +} + +// Fetch data +while ($row = $result->fetch_assoc()) { + $data[] = [ + 'id' => $row['id'], + 'index' => $row['index'], + 'default-creature' => $row['default_creature'], + 'hidden-creatures' => parseLines($row['hidden_creatures'] ?? ''), + 'alias' => parseLines($row['aliases'] ?? ''), + 'masters' => parseLines($row['masters'] ?? ''), + 'creatures' => parseLines($row['creatures'] ?? ''), + 'equipment' => parseLines($row['equipment'] ?? ''), + 'locations' => parseLines($row['locations'] ?? '') + ]; +} + +// Free the result set +$result->free(); + +// Set the header and output JSON +header('Content-Type: application/json'); +echo json_encode($data, JSON_PRETTY_PRINT); + +// Close the statement and connection +$stmt->close(); +$mysqli->close(); +?> diff --git a/dist/data/creatures.php b/dist/data/creatures.php new file mode 100644 index 0000000..9913a14 --- /dev/null +++ b/dist/data/creatures.php @@ -0,0 +1,97 @@ + $message]); + exit; +} + +// Create connection +$mysqli = new mysqli($host, $user, $pass, $db); +if ($mysqli->connect_error) { + respondWithError("Connection failed: " . $mysqli->connect_error); +} + +// Check for the 'q' query parameter +$q = $_GET['q'] ?? 'all'; // Null coalescing operator for default value + +// Prepare SQL query for creatures and variants +$query = $q === 'all' + ? "SELECT c.*, v.id AS variant_id, v.name AS variant_name, v.image, v.experience, + v.slayer_exp, v.lifepoint_exp, v.level, v.slayer_level, + v.defence, v.lifepoints, v.max_melee, v.max_ranged, + v.max_magic, v.max_necromancy, v.max_spec, v.susceptible, v.weaknesses + FROM creatures c + LEFT JOIN variants v ON c.id = v.creature_id" + : "SELECT c.*, v.id AS variant_id, v.name AS variant_name, v.image, v.experience, + v.slayer_exp, v.lifepoint_exp, v.level, v.slayer_level, + v.defence, v.lifepoints, v.max_melee, v.max_ranged, + v.max_magic, v.max_necromancy, v.max_spec, v.susceptible, v.weaknesses + FROM creatures c + LEFT JOIN variants v ON c.id = v.creature_id WHERE c.name = ?"; + +$stmt = $mysqli->prepare($query); +if ($stmt === false) { + respondWithError("Prepare failed: " . $mysqli->error); +} + +if ($q !== 'all') { + $stmt->bind_param("s", $q); +} + +$stmt->execute(); +$result = $stmt->get_result(); +$data = []; + +// Fetch data +while ($row = $result->fetch_assoc()) { + $creatureId = $row['id']; + // Check if this creature already exists in the data array + if (!isset($data[$creatureId])) { + $data[$creatureId] = [ + 'id' => $row['id'], + 'name' => $row['name'], + 'variants' => [] + ]; + } + + // Check if the row contains variant data + if (isset($row['variant_id'])) { // Ensure variant_id exists + $variant = [ + 'id' => $row['variant_id'], + 'name' => $row['variant_name'], + 'image' => $row['image'], + 'experience' => $row['experience'], + 'slayer-exp' => $row['slayer_exp'], + 'lifepoint-exp' => $row['lifepoint_exp'], + 'level' => $row['level'], + 'slayer-level' => $row['slayer_level'], + 'defence' => $row['defence'], + 'lifepoints' => $row['lifepoints'], + 'max-melee' => $row['max_melee'], + 'max-ranged' => $row['max_ranged'], + 'max-magic' => $row['max_magic'], + 'max-necromancy' => $row['max_necromancy'], + 'max-spec' => $row['max_spec'], + 'susceptible' => explode("\r\n", $row['susceptible'] ?: ''), + 'weakness' => explode("\r\n", $row['weaknesses'] ?: '') + ]; + $data[$creatureId]['variants'][] = $variant; + } +} + +// Output JSON +header('Content-Type: application/json'); +echo json_encode(array_values($data), JSON_PRETTY_PRINT); + +// Free the result set and close the connection +$result->free(); +$stmt->close(); +$mysqli->close(); +?> diff --git a/dist/data/masters.php b/dist/data/masters.php new file mode 100644 index 0000000..d9a6aed --- /dev/null +++ b/dist/data/masters.php @@ -0,0 +1,66 @@ + $message]); + exit; +} + +// Create connection +$mysqli = new mysqli($host, $user, $pass, $db); +if ($mysqli->connect_error) { + respondWithError("Connection failed: " . $mysqli->connect_error); +} + +// Check for the 'q' query parameter and sanitize input +$q = isset($_GET['q']) ? trim($_GET['q']) : 'all'; // Default to 'all' + +// Prepare SQL query with a safeguard against SQL injection +$query = $q === 'all' ? "SELECT * FROM masters" : "SELECT * FROM masters WHERE `name` = ?"; +$stmt = $mysqli->prepare($query); +if ($stmt === false) { + respondWithError("Prepare failed: " . $mysqli->error); +} +if ($q !== 'all') { + $stmt->bind_param("s", $q); +} +$stmt->execute(); +$result = $stmt->get_result(); +$data = []; + +// Fetch data +while ($row = $result->fetch_assoc()) { + $taskCounts = []; + + // Handle empty counts gracefully + $countLines = !empty($row['counts']) ? explode("\r\n", $row['counts']) : []; + + foreach ($countLines as $line) { + if (strpos($line, ':') !== false) { + [$key, $count] = array_map('trim', explode(':', $line, 2)); // Limit to 2 parts + $taskCounts[$key] = $count; + } + } + + $data[] = [ + 'id' => $row['id'], + 'name' => $row['name'], + 'url' => $row['url'], + 'task-counts' => $taskCounts + ]; +} + +// Output JSON +header('Content-Type: application/json'); +echo json_encode($data, JSON_PRETTY_PRINT); + +// Close the connection +$stmt->close(); +$mysqli->close(); +?> diff --git a/dist/data/old/assignments.json b/dist/data/old/assignments.json new file mode 100644 index 0000000..b474aa5 --- /dev/null +++ b/dist/data/old/assignments.json @@ -0,0 +1,3787 @@ +[ + { + "default-creature": "Aberrant spectre#Slayer Tower", + "weakness": [], + "creatures": ["Aberrant spectre"], + "hidden-creatures": [], + "index": "Aberrant spectres", + "alias": [], + "equipment": [ + "Nose peg<\/a>", + "Slayer helmet<\/a>" + ], + "masters": [ + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Pollnivneach Slayer Dungeon<\/a>", + "Slayer Tower<\/a>" + ] + }, + { + "default-creature": "Abyssal demon#Default", + "weakness": [], + "creatures": [ + "Abyssal beast", + "Abyssal demon", + "Abyssal demon (elite)", + "Abyssal lord", + "Abyssal savage" + ], + "hidden-creatures": ["Abyssal demon (elite)"], + "index": "Abyssal Demons", + "alias": ["Abyssal demons"], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Slayer Tower<\/a>", + "Kuradal's Dungeon<\/a>", + "Abyssal Area<\/a>", + "Graveyard of Shadows<\/a>", + "Forinthry Dungeon<\/a>" + ] + }, + { + "default-creature": "Abyssal beast#Default", + "weakness": [], + "creatures": ["Abyssal beast"], + "hidden-creatures": [], + "index": "Abyssal beasts", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Senntisten Asylum<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Abyssal lord#Default", + "weakness": [], + "creatures": ["Abyssal lord"], + "hidden-creatures": [], + "index": "Abyssal lords", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Senntisten Asylum<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Abyssal savage#Asylum", + "weakness": [], + "creatures": ["Abyssal savage"], + "hidden-creatures": [], + "index": "Abyssal savages", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Senntisten Asylum<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Acheron mammoth#Default", + "weakness": [], + "creatures": ["Acheron mammoth"], + "hidden-creatures": [], + "index": "Acheron mammoths", + "alias": ["Acheron mammoth"], + "equipment": [], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Mammoth iceberg<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Adamant dragon#Default", + "weakness": [], + "creatures": ["Adamant dragon"], + "hidden-creatures": [], + "index": "Adamant dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Adamant dragon dungeon<\/a>", + "Dragonkin Lair<\/a>" + ] + }, + { + "default-creature": "Airut#Melee", + "weakness": [], + "creatures": ["Airut"], + "hidden-creatures": [], + "index": "Airut", + "alias": [], + "equipment": [], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Kuradal's Dungeon<\/a>", + "Piscatoris Fishing Colony<\/a>", + "Mazcab<\/a>" + ] + }, + { + "default-creature": "Ankou#Default", + "weakness": [], + "creatures": [ + "Ankou", + "Ankou (Kili's Knowledge IV)", + "Ankou (elite)" + ], + "hidden-creatures": ["Ankou (elite)"], + "index": "Ankou", + "alias": ["Ankous"], + "equipment": [], + "masters": [ + "The Raptor", + "Mazchna" + ], + "locations": [ + "Stronghold of Security<\/a>", + "Wilderness Crater<\/a>" + ] + }, + { + "default-creature": "Aquanite#Default", + "weakness": [], + "creatures": [ + "Aquanite", + "Aquanite (elite)" + ], + "hidden-creatures": ["Aquanite (elite)"], + "index": "Aquanites", + "alias": [], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Fremennik Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Armoured phantom#1", + "weakness": [], + "creatures": ["Armoured phantom"], + "hidden-creatures": [], + "index": "Armoured phantoms", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [ + "Crypt<\/a>", + "Wilderness<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Capsarius#1", + "weakness": [], + "creatures": [ + "Capsarius", + "Gladius", + "Legio Primus", + "Legio Quartus", + "Legio Quintus", + "Legio Secundus", + "Legio Sextus", + "Legio Tertius", + "Rorarius", + "Scutarius" + ], + "hidden-creatures": [], + "index": "Ascension members", + "alias": [], + "equipment": [], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Monastery of Ascension<\/a>"] + }, + { + "default-creature": "Kree'arra#Normal", + "weakness": [], + "creatures": [ + "Aviansie", + "Flight Kilisa", + "Flockleader Geerin", + "Kree'arra", + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior", + "Wingman Skree" + ], + "hidden-creatures": [ + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior" + ], + "index": "Aviansies", + "alias": ["Aviansie"], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "God Wars Dungeon<\/a>", + "[n 3]<\/a><\/sup>" + ] + }, + { + "default-creature": "Banshee#Default", + "weakness": [], + "creatures": [ + "Banshee", + "Mighty banshee" + ], + "hidden-creatures": ["Mighty banshee"], + "index": "Banshees", + "alias": [], + "equipment": [ + "Earmuffs<\/a>", + "Masked earmuffs<\/a>", + "Slayer helmet<\/a>" + ], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": ["Slayer Tower<\/a>"] + }, + { + "default-creature": "Basilisk#Large", + "weakness": [], + "creatures": ["Basilisk"], + "hidden-creatures": [], + "index": "Basilisks", + "alias": [], + "equipment": ["Mirror shield<\/a>"], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "Bat#Default", + "weakness": [], + "creatures": [ + "Albino bat", + "Bat", + "Giant bat", + "Warped bat" + ], + "hidden-creatures": [], + "index": "Bats", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Silvarea<\/a>", + "Morytania<\/a>" + ] + }, + { + "default-creature": "Black bear#Default", + "weakness": [], + "creatures": [ + "Angry bear", + "Bear cub", + "Black bear", + "Grizzly bear", + "Grizzly bear cub" + ], + "hidden-creatures": [ + "Angry bear", + "Bear cub", + "Grizzly bear", + "Grizzly bear cub" + ], + "index": "Bears", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [] + }, + { + "default-creature": "Chicken#White", + "weakness": [], + "creatures": [ + "Bird", + "Chicken", + "Chompy bird", + "Duck", + "Duckling", + "Jubbly bird", + "Mounted terrorbird gnome", + "Oomlie bird", + "Pekin", + "Penguin (monster)", + "Pernicious parrot", + "Rooster", + "Seagull", + "Tenacious toucan", + "Terrorbird", + "Undead chicken", + "Undead pekin" + ], + "hidden-creatures": [ + "Bird", + "Chompy bird", + "Duckling", + "Jubbly bird", + "Mounted terrorbird gnome", + "Oomlie bird", + "Pekin", + "Penguin (monster)", + "Pernicious parrot", + "Rooster", + "Seagull", + "Tenacious toucan", + "Undead chicken", + "Undead pekin" + ], + "index": "Birds", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Jacquelyn" + ], + "locations": [ + "Ape Atoll<\/a>", + "Crash Island<\/a>", + "Life altar<\/a>", + "Nature altar<\/a>" + ] + }, + { + "default-creature": "Black demon#1", + "weakness": [], + "creatures": [ + "Balfrug Kreeyath", + "Black demon" + ], + "hidden-creatures": ["Balfrug Kreeyath"], + "index": "Black demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Edgeville Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Brimhaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Queen Black Dragon#Normal", + "weakness": [], + "creatures": [ + "Alanogard the Black", + "Baby black dragon", + "Black dragon", + "Black dragon (Dragonkin Laboratory)", + "King Black Dragon", + "Queen Black Dragon", + "Verak Lith", + "Verak Little" + ], + "hidden-creatures": [ + "Alanogard the Black", + "Verak Lith", + "Verak Little" + ], + "index": "Black dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "The Raptor", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Lava Maze<\/a>", + "Evil Chicken's Lair<\/a>" + ] + }, + { + "default-creature": "Bloodveld#Default", + "weakness": [], + "creatures": [ + "Bloodveld", + "Bloodveld (God Wars Dungeon)", + "Bloodveld (Heart of Gielinor)", + "Mutated bloodveld" + ], + "hidden-creatures": [], + "index": "Bloodveld", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Slayer Tower<\/a>", + "God Wars Dungeon<\/a>", + "Meiyerditch Dungeon<\/a>" + ] + }, + { + "default-creature": "Blue dragon#1", + "weakness": [], + "creatures": [ + "Baby blue dragon", + "Blue dragon", + "Vorkath" + ], + "hidden-creatures": [], + "index": "Blue dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Kuradal", + "Laniakea" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Ogre Enclave<\/a>", + "Heroes' Guild<\/a>", + "Kuradal's Dungeon<\/a>" + ] + }, + { + "default-creature": "Bound skeleton#1", + "weakness": [], + "creatures": ["Bound skeleton"], + "hidden-creatures": [], + "index": "Bound skeletons", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Fort Forinthry<\/a>"] + }, + { + "default-creature": "Brine rat#Default", + "weakness": [], + "creatures": ["Brine rat"], + "hidden-creatures": [], + "index": "Brine rats", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Brine Rat Cavern<\/a>"] + }, + { + "default-creature": "Bronze dragon#Default", + "weakness": [], + "creatures": ["Bronze dragon"], + "hidden-creatures": [], + "index": "Bronze dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Chaeldar", + "Laniakea" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Camel Warrior#Default", + "weakness": [], + "creatures": ["Camel Warrior"], + "hidden-creatures": [], + "index": "Camel warriors", + "alias": ["Camel Warrior"], + "equipment": [], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Camel Warriors island<\/a>"] + }, + { + "default-creature": "Catablepon#Default", + "weakness": [], + "creatures": ["Catablepon"], + "hidden-creatures": [], + "index": "Catablepon", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": ["Stronghold of Security<\/a>"] + }, + { + "default-creature": "Cave bug#Level 11", + "weakness": [], + "creatures": ["Cave bug"], + "hidden-creatures": [], + "index": "Cave bugs", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Jacquelyn" + ], + "locations": [ + "Burthorpe Slayer Cave<\/a>", + "Chaos Tunnels<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>", + "Lumbridge Swamp Caves<\/a>" + ] + }, + { + "default-creature": "Cave crawler#Level 24", + "weakness": [], + "creatures": ["Cave crawler"], + "hidden-creatures": [], + "index": "Cave crawlers", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Lumbridge Swamp Caves<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "Unspeakable horror#Default", + "weakness": [], + "creatures": [ + "Cave horror", + "Cave horror (elite)", + "Unspeakable horror", + "Unspeakable horror (elite)" + ], + "hidden-creatures": [ + "Cave horror (elite)", + "Unspeakable horror (elite)" + ], + "index": "Cave horrors", + "alias": [], + "equipment": [ + "Witchwood icon<\/a>", + "Light source<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona" + ], + "locations": ["Mos Le'Harmless Caves<\/a>"] + }, + { + "default-creature": "Cave slime#Default", + "weakness": [], + "creatures": [ + "Cave slime", + "Giant slime", + "Laboratory slime" + ], + "hidden-creatures": [ + "Giant slime", + "Laboratory slime" + ], + "index": "Cave slimes", + "alias": ["Cave slime"], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Lumbridge Swamp Caves<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>" + ] + }, + { + "default-creature": "Celestial dragon#Default", + "weakness": [], + "creatures": [ + "Astellarn", + "Celestial dragon", + "Celestial dragon (Dragonkin Laboratory)", + "Elegorn the Celestial" + ], + "hidden-creatures": [ + "Astellarn", + "Celestial dragon (Dragonkin Laboratory)" + ], + "index": "Celestial dragons", + "alias": [], + "equipment": ["Super antifire<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Dragontooth Island resource dungeon<\/a>"] + }, + { + "default-creature": "Chaos Giant#Default", + "weakness": [], + "creatures": ["Chaos Giant"], + "hidden-creatures": [], + "index": "Chaos giants", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Barendir<\/a>"] + }, + { + "default-creature": "Cockatrice#Default", + "weakness": [], + "creatures": ["Cockatrice"], + "hidden-creatures": [], + "index": "Cockatrice", + "alias": ["Cockatrices"], + "equipment": ["Mirror shield<\/a>"], + "masters": ["Mazchna"], + "locations": ["Fremennik Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Cockroach drone#Default", + "weakness": [], + "creatures": [ + "Cockroach drone", + "Cockroach soldier", + "Cockroach worker", + "Warped cockroach" + ], + "hidden-creatures": [], + "index": "Cockroaches", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Lumbridge Catacombs<\/a>", + "Stronghold of Player Safety<\/a>" + ] + }, + { + "default-creature": "Corrupted scorpion#Default", + "weakness": [], + "creatures": [ + "Corrupted dust devil", + "Corrupted kalphite guardian", + "Corrupted kalphite marauder", + "Corrupted lizard", + "Corrupted scarab", + "Corrupted scorpion", + "Corrupted worker" + ], + "hidden-creatures": [], + "index": "Corrupted creatures", + "alias": [ + "Corrupted dust devils", + "Corrupted kalphites", + "Corrupted lizards", + "Corrupted scarabs", + "Corrupted scorpions", + "Corrupted worker" + ], + "equipment": ["Feather of Ma'at<\/a>"], + "masters": [ + "Sumona", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Sophanem Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Cow#Standard (1)", + "weakness": [], + "creatures": [ + "Cow", + "Cow calf", + "Super Cow", + "Undead cow" + ], + "hidden-creatures": [ + "Cow calf", + "Super Cow", + "Undead cow" + ], + "index": "Cows", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Jacquelyn" + ], + "locations": [] + }, + { + "default-creature": "Crawling hand#10a", + "weakness": [], + "creatures": [ + "Crawling hand", + "Skeletal hand", + "Zombie hand" + ], + "hidden-creatures": [ + "Skeletal hand", + "Zombie hand" + ], + "index": "Crawling hands", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Chaeldar" + ], + "locations": [ + "Burthorpe Slayer Cave<\/a>", + "Slayer Tower<\/a>" + ] + }, + { + "default-creature": "Edimmu#Default", + "weakness": [], + "creatures": [ + "Edimmu", + "Edimmu (elite)", + "Frost dragon", + "Kal'gerion demon", + "Seeker", + "Soulgazer" + ], + "hidden-creatures": ["Edimmu (elite)"], + "index": "Creatures of Daemonheim", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": [] + }, + { + "default-creature": "Bulbous crawler#Default", + "weakness": [], + "creatures": [ + "Bulbous crawler", + "Moss golem", + "Vinecrawler" + ], + "hidden-creatures": [], + "index": "Creatures of the Lost Grove", + "alias": ["Lost Grove creatures"], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["The Lost Grove<\/a>"] + }, + { + "default-creature": "Automaton Generator#Post-quest", + "weakness": [], + "creatures": [ + "Automaton Generator", + "Automaton Guardian", + "Automaton Tracer" + ], + "hidden-creatures": [], + "index": "Cres's creations", + "alias": ["Automatons"], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Guthix's Cave<\/a>"] + }, + { + "default-creature": "Crocodile#40", + "weakness": [], + "creatures": [ + "Crocodile", + "Crocodile akh", + "Ol' Sawtooth", + "Sea crocodile" + ], + "hidden-creatures": [ + "Ol' Sawtooth", + "Sea crocodile" + ], + "index": "Crocodiles", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Sumona" + ], + "locations": [ + "Elid<\/a>", + "Kharidian Desert<\/a>" + ] + }, + { + "default-creature": "Crystal Shapeshifter#Magic", + "weakness": [], + "creatures": ["Crystal Shapeshifter"], + "hidden-creatures": [], + "index": "Crystal shapeshifters", + "alias": [], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["Tarddiad<\/a>"] + }, + { + "default-creature": "Cyclops#57 (Crush)", + "weakness": [], + "creatures": [ + "Cyclops", + "Cyclossus" + ], + "hidden-creatures": ["Cyclossus"], + "index": "Cyclopes", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "2nd<\/sup> floor[UK<\/span>]<\/sup><\/span>3rd<\/sup> floor[US<\/span>]<\/sup><\/span><\/span>", + "Warriors' Guild<\/a>", + "Ardougne Zoo<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Dagannoth Rex#Default", + "weakness": [], + "creatures": [ + "Dagannoth (Lighthouse)", + "Dagannoth (Waterbirth Island)", + "Dagannoth (Waterbirth Island, ranged)", + "Dagannoth Prime", + "Dagannoth Rex", + "Dagannoth Supreme", + "Dagannoth fledgeling", + "Dagannoth guardian", + "Dagannoth spawn" + ], + "hidden-creatures": [ + "Dagannoth (Lighthouse)", + "Dagannoth (Waterbirth Island)", + "Dagannoth (Waterbirth Island, ranged)", + "Dagannoth fledgeling", + "Dagannoth guardian", + "Dagannoth spawn" + ], + "index": "Dagannoth", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Chaos Tunnels<\/a>", + "Lighthouse<\/a>", + "Waterbirth Island<\/a>" + ] + }, + { + "default-creature": "Dark beast#19,000 life points", + "weakness": [], + "creatures": [ + "Dark beast", + "Dark beast (elite)", + "Revenant dark beast" + ], + "hidden-creatures": [ + "Dark beast (elite)", + "Revenant dark beast" + ], + "index": "Dark beasts", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Kuradal's Dungeon<\/a>", + "Temple of Light<\/a>" + ] + }, + { + "default-creature": "K'ril Tsutsaroth#Normal", + "weakness": [], + "creatures": [ + "Abyssal beast", + "Abyssal demon", + "Abyssal lord", + "Abyssal savage", + "Balfrug Kreeyath", + "Black demon", + "Cerberus Juvenile", + "Gargoyle", + "Greater demon", + "Greater demon ash lord", + "Greater demon berserker", + "Greater demon brute", + "Greater demon pyromancer", + "Greater demon sage", + "Greater demon savage", + "Imp", + "Imp scavenger", + "K'ril Tsutsaroth", + "Kal'gerion demon", + "Kal'gerion demon (The Shadow Reef)", + "Lesser demon", + "Revenant demon", + "Ripper Demon", + "Tormented demon", + "Tstanon Karlak", + "Yor'Ger the Deceiver", + "Zakl'n Gritch" + ], + "hidden-creatures": [ + "Gargoyle", + "Imp", + "Kal'gerion demon", + "Kal'gerion demon (The Shadow Reef)", + "Tstanon Karlak", + "Yor'Ger the Deceiver", + "Zakl'n Gritch" + ], + "index": "Demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [] + }, + { + "default-creature": "Corrupted lizard#Default", + "weakness": [], + "creatures": [ + "Corrupted lizard", + "Desert Lizard", + "Lizard", + "Small Lizard" + ], + "hidden-creatures": [], + "index": "Desert lizards", + "alias": [], + "equipment": ["Ice cooler<\/a>"], + "masters": [ + "Mazchna", + "Sumona" + ], + "locations": ["Kharidian Desert<\/a>"] + }, + { + "default-creature": "Desert strykewyrm#Default", + "weakness": [], + "creatures": ["Desert strykewyrm"], + "hidden-creatures": [], + "index": "Desert strykewyrms", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Al Kharid<\/a>"] + }, + { + "default-creature": "Ripper dinosaur#Normal", + "weakness": [], + "creatures": [ + "Baby Dinosaur Skeleton", + "Brutish dinosaur", + "Feral Dinosaur", + "Orikalka", + "Osseous", + "Pthentraken", + "Rathis", + "Ripper dinosaur", + "Venomous dinosaur" + ], + "hidden-creatures": [], + "index": "Dinosaurs", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": ["Anachronia<\/a>"] + }, + { + "default-creature": "Jackal#Default", + "weakness": [], + "creatures": [ + "Guard dog", + "Jackal", + "Shadow Hound", + "Wild dog" + ], + "hidden-creatures": [ + "Guard dog", + "Shadow Hound", + "Wild dog" + ], + "index": "Dogs", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Ardougne<\/a>", + "McGrubor's Wood<\/a>", + "Black Arm Gang<\/a>", + "Brimhaven<\/a>", + "Brimhaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Queen Black Dragon#Normal", + "weakness": [], + "creatures": [ + "Adamant dragon", + "Alanogard the Black", + "Astellarn", + "Baby blue dragon", + "Baby red dragon", + "Black dragon", + "Black dragon (Dragonkin Laboratory)", + "Black stone dragon", + "Blue dragon", + "Bronze dragon", + "Brutal green dragon", + "Celestial dragon", + "Celestial dragon (Dragonkin Laboratory)", + "Dragonstone dragon", + "Dragonstone dragon (Dragonkin Laboratory)", + "Elegorn the Celestial", + "Frost dragon", + "Green dragon", + "Hydrix dragon", + "Hydrix dragon (Dragonkin Laboratory)", + "Iron dragon", + "King Black Dragon", + "Mithril dragon", + "Nodon artificer", + "Nodon engineer", + "Nodon guard", + "Nodon hunter", + "Onyx dragon", + "Onyx dragon (Dragonkin Laboratory)", + "Queen Black Dragon", + "Red dragon", + "Red dragon (Dragonkin Laboratory)", + "Rune dragon", + "Sangri the Red", + "Siege engine", + "Steel dragon", + "Verak Lith", + "Verak Little", + "Vorkath" + ], + "hidden-creatures": [], + "index": "Dragons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [] + }, + { + "default-creature": "Corrupted dust devil#Default", + "weakness": [], + "creatures": [ + "Corrupted dust devil", + "Dust devil", + "Dust devil (elite)" + ], + "hidden-creatures": ["Dust devil (elite)"], + "index": "Dust devils", + "alias": [], + "equipment": [ + "Face mask<\/a>", + "Masked earmuffs<\/a>", + "Slayer helmet<\/a>", + "Gas mask<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Smoke Dungeon<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Earth warrior#Default", + "weakness": [], + "creatures": [ + "Earth warrior", + "Earth warrior (elite)" + ], + "hidden-creatures": ["Earth warrior (elite)"], + "index": "Earth warriors", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Edgeville Dungeon<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Edimmu#Default", + "weakness": [], + "creatures": [ + "Edimmu", + "Edimmu (elite)" + ], + "hidden-creatures": ["Edimmu (elite)"], + "index": "Edimmu", + "alias": [], + "equipment": ["Dungeoneering<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Edimmu resource dungeon<\/a>"] + }, + { + "default-creature": "Elf warrior#Melee", + "weakness": [], + "creatures": [ + "Cadarn magus", + "Cadarn ranger", + "Elf warrior", + "Iorwerth guard", + "Iorwerth scout", + "Knight of Ardougne (West Ardougne)", + "Mourner (Mourner Tunnels)", + "Seren archer", + "Seren mage", + "Seren warrior" + ], + "hidden-creatures": [ + "Knight of Ardougne (West Ardougne)", + "Mourner (Mourner Tunnels)", + "Seren archer", + "Seren mage", + "Seren warrior" + ], + "index": "Elves", + "alias": [], + "equipment": [], + "masters": [ + "Chaeldar", + "Sumona", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Lletya<\/a>", + "Elf Camp<\/a>", + "Prifddinas<\/a>", + "Heart of Gielinor<\/a>" + ] + }, + { + "default-creature": "Fetid zombie#1", + "weakness": [], + "creatures": ["Fetid zombie"], + "hidden-creatures": [], + "index": "Fetid zombies", + "alias": [], + "equipment": [], + "masters": ["The Raptor"], + "locations": [ + "crypt<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Fever spider#Default", + "weakness": [], + "creatures": ["Fever spider"], + "hidden-creatures": [], + "index": "Fever spiders", + "alias": [], + "equipment": ["Slayer gloves<\/a>"], + "masters": ["Chaeldar"], + "locations": ["Braindeath Island<\/a>"] + }, + { + "default-creature": "Fire giant#Default", + "weakness": [], + "creatures": ["Fire giant"], + "hidden-creatures": [], + "index": "Fire giants", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Smoke Dungeon<\/a>", + "Resource dungeon<\/a>", + "Waterfall Dungeon<\/a>" + ] + }, + { + "default-creature": "Flesh Crawler#Default", + "weakness": [], + "creatures": ["Flesh Crawler"], + "hidden-creatures": [], + "index": "Fleshcrawlers", + "alias": ["Flesh Crawlers"], + "equipment": [], + "masters": ["Vannaka"], + "locations": ["Stronghold of Security<\/a>"] + }, + { + "default-creature": "Plague frog#Default", + "weakness": [], + "creatures": [ + "Big frog", + "Frog", + "Frogeel", + "Giant frog", + "Plague frog", + "Swamp frog" + ], + "hidden-creatures": [ + "Big frog", + "Frogeel", + "Giant frog" + ], + "index": "Frogs", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Lumbridge Swamp Caves<\/a>", + "Lumbridge Swamp<\/a>", + "Sophanem<\/a>", + "Jade vine maze<\/a>" + ] + }, + { + "default-creature": "Fungal mage#Normal", + "weakness": [], + "creatures": ["Fungal mage"], + "hidden-creatures": [], + "index": "Fungal magi", + "alias": ["Fungal mages"], + "equipment": ["Neem oil<\/a>"], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Ganodermic beast#Normal", + "weakness": [], + "creatures": [ + "Ganodermic beast", + "Ganodermic runt" + ], + "hidden-creatures": [], + "index": "Ganodermic creatures", + "alias": [], + "equipment": ["Neem oil<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Gargoyle#Regular", + "weakness": [], + "creatures": ["Gargoyle"], + "hidden-creatures": [], + "index": "Gargoyles", + "alias": [], + "equipment": ["Rock hammer<\/a>"], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Chaos Tunnels<\/a>", + "Kuradal's Dungeon<\/a>", + "Ruins (east)<\/a>", + "Slayer Tower<\/a>" + ] + }, + { + "default-creature": "Gelatinous abomination#Default", + "weakness": [], + "creatures": ["Gelatinous abomination"], + "hidden-creatures": [], + "index": "Gelatinous abominations", + "alias": [], + "equipment": ["Spiked gloves<\/a>"], + "masters": ["Turael"], + "locations": ["Burthorpe Slayer Cave<\/a>"] + }, + { + "default-creature": "Hydrix dragon#Default", + "weakness": [], + "creatures": [ + "Black stone dragon", + "Dragonstone dragon", + "Dragonstone dragon (Dragonkin Laboratory)", + "Hydrix dragon", + "Hydrix dragon (Dragonkin Laboratory)", + "Onyx dragon", + "Onyx dragon (Dragonkin Laboratory)" + ], + "hidden-creatures": [], + "index": "Gemstone dragons", + "alias": [], + "equipment": ["Super anti-fire potion<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Gemstone cavern<\/a>"] + }, + { + "default-creature": "Ghost#1", + "weakness": [], + "creatures": [ + "Aberrant spectre", + "Ahrim the Blighted", + "Akrisae the Doomed", + "Ankou", + "Banshee", + "Dharok the Wretched", + "Edimmu", + "Edimmu (elite)", + "Ghast", + "Ghost", + "Ghost (Abandoned Mine)", + "Ghost (Ourania Runecrafting Altar)", + "Ghost (Shattered Worlds)", + "Ghost (Spirit of Summer)", + "Ghost (Stronghold of Security)", + "Ghost healer", + "Ghostly troll bruiser", + "Ghostly troll thrower", + "Ghostly warrior", + "Guthan the Infested", + "Karil the Tainted", + "Linza the Disgraced", + "Masuta the Descended", + "Mighty banshee", + "Revenant cyclops", + "Revenant dark beast", + "Revenant demon", + "Revenant dragon", + "Revenant goblin", + "Revenant hellhound", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant knight", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf", + "Risen ghost", + "Shade", + "Shadow warrior", + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior", + "Torag the Corrupted", + "Tormented soul (Uncharted Isles)", + "Tormented wraith", + "Tortured soul (Port Phasmatys)", + "Verac the Defiled", + "Wight", + "Wight (Missing, Presumed Death)", + "Wight ranger", + "Wight ranger (Sliske's Endgame)" + ], + "hidden-creatures": [ + "Edimmu (elite)", + "Ghost (Abandoned Mine)", + "Ghost (Ourania Runecrafting Altar)", + "Ghost (Shattered Worlds)", + "Ghost (Spirit of Summer)", + "Ghost (Stronghold of Security)", + "Revenant cyclops", + "Revenant demon", + "Revenant goblin", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf", + "Tormented soul (Uncharted Isles)", + "Tormented wraith", + "Tortured soul (Port Phasmatys)", + "Wight", + "Wight (Missing, Presumed Death)", + "Wight ranger", + "Wight ranger (Sliske's Endgame)" + ], + "index": "Ghosts", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka", + "The Raptor" + ], + "locations": [ + "Varrock Sewers<\/a>", + "Draynor Manor<\/a>", + "Melzar's Maze<\/a>", + "Stronghold of Security<\/a>", + "Taverley Dungeon<\/a>", + "Tarn's Lair<\/a>", + "Death Altar<\/a>", + "Haunted Mine<\/a>", + "Clan Wars<\/a>", + "Forgotten Cemetery<\/a>" + ] + }, + { + "default-creature": "Ravenous ghoul#Default", + "weakness": [], + "creatures": [ + "Ghoul", + "Ghoul (Paterdomus)", + "Ravenous ghoul", + "Ravenous ghoul (Mazchna)" + ], + "hidden-creatures": [ + "Ghoul (Paterdomus)", + "Ravenous ghoul (Mazchna)" + ], + "index": "Ghouls", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": ["Canifis<\/a>"] + }, + { + "default-creature": "Arch-Glacor#Normal mode", + "weakness": [], + "creatures": [ + "Arch-Glacor", + "Bolstered Glacyte", + "Enduring glacyte", + "Glacor", + "Glacyte", + "Glacyte (Arch-Glacor)", + "Sapping glacyte", + "Unstable glacyte" + ], + "hidden-creatures": [], + "index": "Glacors", + "alias": ["Glacor"], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Glacor Cave<\/a>", + "Glacor front<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Goblin#Level 11", + "weakness": [], + "creatures": [ + "Angry goblin", + "Brokeface", + "Cave goblin (monster)", + "Cave goblin guard", + "Cave goblin miner", + "Goblin", + "Goblin (Goblin Village)", + "Goblin (God Wars Dungeon)", + "Goblin (Stronghold of Security)", + "Guard (cave goblin)", + "Lumpnose", + "Sergeant Grimspike", + "Sergeant Steelwill", + "Sergeant Strongstack", + "Skoblin", + "Stinkears" + ], + "hidden-creatures": [ + "Angry goblin", + "Brokeface", + "Cave goblin (monster)", + "Cave goblin guard", + "Cave goblin miner", + "Guard (cave goblin)", + "Lumpnose", + "Sergeant Grimspike", + "Sergeant Steelwill", + "Sergeant Strongstack", + "Skoblin" + ], + "index": "Goblins", + "alias": [], + "equipment": [], + "masters": ["Jacquelyn"], + "locations": [ + "Lumbridge catacombs<\/a>", + "Goblin Village<\/a>", + "Port Sarim<\/a>", + "Varrock Dig Site<\/a>", + "Stronghold of Security<\/a>", + "Underground Pass<\/a>", + "Goblin Cave<\/a>", + "Coal truck mining site<\/a>", + "God Wars Dungeon<\/a>", + "Observatory<\/a>", + "Gunnarsgrunn<\/a>" + ] + }, + { + "default-creature": "Gorak#God Wars Dungeon", + "weakness": [], + "creatures": ["Gorak"], + "hidden-creatures": [], + "index": "Goraks", + "alias": ["Gorak"], + "equipment": [], + "masters": ["Duradel"], + "locations": [ + "Fairy ring<\/a>", + "D<\/b>I<\/b>R<\/b><\/span>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Greater demon ash lord#Wilderness", + "weakness": [], + "creatures": [ + "Greater demon ash lord", + "Greater demon berserker" + ], + "hidden-creatures": [], + "index": "Greater demon berserkers and ash lords", + "alias": [ + "Greater demon ash lords", + "Greater demon berserkers" + ], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "The Zamorakian Undercity<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "K'ril Tsutsaroth#Normal", + "weakness": [], + "creatures": [ + "Butcher demon", + "Champion of Infernus", + "Chaos Demon", + "Chaos Demon Savage", + "Denizen of Infernus", + "Greater demon", + "Greater demon (elite)", + "Greater demon ash lord", + "Greater demon berserker", + "Greater demon brute", + "Greater demon pyromancer", + "Greater demon sage", + "Greater demon savage", + "K'ril Tsutsaroth", + "Kor'Vath the Blightbringer", + "La'Kalor the Unbroken", + "Shara'Kor the Widowmaker", + "Tstanon Karlak" + ], + "hidden-creatures": [ + "Butcher demon", + "Champion of Infernus", + "Greater demon (elite)" + ], + "index": "Greater demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Entrana Dungeon<\/a>", + "Brimhaven Dungeon<\/a>", + "Ogre Enclave<\/a>", + "Kuradal's Dungeon<\/a>", + "Demonic ruins<\/a>", + "Wilderness Crater<\/a>", + "Lava Maze Dungeon<\/a>" + ] + }, + { + "default-creature": "Green dragon#1", + "weakness": [], + "creatures": [ + "Brutal green dragon", + "Green dragon" + ], + "hidden-creatures": [], + "index": "Green dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "The Raptor", + "Mazchna", + "Laniakea" + ], + "locations": [ + "Chaos tunnels<\/a>", + "Clan Wars<\/a>", + "Goblin Village<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Grifolapine#Normal", + "weakness": [], + "creatures": ["Grifolapine"], + "hidden-creatures": [], + "index": "Grifolapines", + "alias": [], + "equipment": [ + "\"Neem<\/a><\/span><\/span>", + "Neem oil<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Grifolaroo#Normal", + "weakness": [], + "creatures": ["Grifolaroo"], + "hidden-creatures": [], + "index": "Grifolaroos", + "alias": [], + "equipment": [ + "\"Neem<\/a><\/span><\/span>", + "Neem oil<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Mature grotworm#Default", + "weakness": [], + "creatures": [ + "Giant worm", + "Grotworm", + "Mature grotworm", + "Young grotworm" + ], + "hidden-creatures": ["Giant worm"], + "index": "Grotworms", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "The Raptor", + "Mazchna", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran" + ], + "locations": ["Grotworm Lair<\/a>"] + }, + { + "default-creature": "Harpie Bug Swarm#Default", + "weakness": [], + "creatures": [ + "Harpie Bug Swarm", + "Harpie Bug Swarm (elite)" + ], + "hidden-creatures": ["Harpie Bug Swarm (elite)"], + "index": "Harpie bug swarms", + "alias": [], + "equipment": ["Bug lantern<\/a>"], + "masters": ["Chaeldar"], + "locations": ["Karamja<\/a>"] + }, + { + "default-creature": "Hellhound#Normal", + "weakness": [], + "creatures": [ + "Cerberus Juvenile", + "Hellhound", + "Hellhound (Heart of Gielinor)", + "Hellhound (The Zamorakian Undercity)", + "Hellhound (summoned)", + "Hellhound Alpha", + "Hellhound Hunter", + "Hellhound Hunter (summoned)", + "Revenant hellhound" + ], + "hidden-creatures": ["Hellhound (Heart of Gielinor)"], + "index": "Hellhounds", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Deserted Keep<\/a>", + "Witchaven Shrine Dungeon<\/a>", + "God Wars Dungeon<\/a>", + "Kuradal's Dungeon<\/a>", + "Wilderness Crater<\/a>" + ] + }, + { + "default-creature": "Hill Giant#Default", + "weakness": [], + "creatures": ["Hill Giant"], + "hidden-creatures": [], + "index": "Hill giants", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Deep Wilderness Dungeon<\/a>", + "Edgeville Dungeon<\/a>", + "(resource dungeon<\/a>)<\/sup>", + "Gnome Stronghold<\/a>", + "Lava Maze<\/a>", + "Observatory<\/a>", + "Taverley Dungeon<\/a>", + "Tree Gnome Village<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Hobgoblin#Level 15", + "weakness": [], + "creatures": [ + "Hobgoblin", + "Hobgoblin (elite)" + ], + "hidden-creatures": ["Hobgoblin (elite)"], + "index": "Hobgoblins", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Asgarnian Ice Dungeon<\/a>", + "Crandor<\/a>", + "Hobgoblin Peninsula<\/a>", + "Edgeville Dungeon<\/a>", + "God Wars Dungeon<\/a>", + "Rellekka<\/a>", + "Waterbirth Island<\/a>", + "Hobgoblin Mine<\/a>", + "Witchaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Hydrix dragon#Default", + "weakness": [], + "creatures": ["Hydrix dragon"], + "hidden-creatures": [], + "index": "Hydrix dragons", + "alias": [], + "equipment": ["Super anti-fire potion<\/a>"], + "masters": ["Mandrith"], + "locations": [ + "Wilderness (level 47) Lava Maze mine<\/a>", + "Deep Wilderness Dungeon<\/a>" + ] + }, + { + "default-creature": "Ice giant#Level 47 (1)", + "weakness": [], + "creatures": ["Ice giant"], + "hidden-creatures": [], + "index": "Ice giants", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Mazchna" + ], + "locations": [ + "Asgarnian Ice Caves<\/a>", + "Chaos Tunnels<\/a>", + "Frozen Waste Plateau<\/a>", + "White Wolf Mountain<\/a>" + ] + }, + { + "default-creature": "Ice strykewyrm#Default", + "weakness": [], + "creatures": ["Ice strykewyrm"], + "hidden-creatures": [], + "index": "Ice strykewyrms", + "alias": [], + "equipment": ["Fire cape<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Ice strykewyrm cave<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Ice warrior#Normal", + "weakness": [], + "creatures": [ + "Ice warrior", + "Icelord" + ], + "hidden-creatures": ["Icelord"], + "index": "Ice warriors", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Mazchna" + ], + "locations": [ + "White Wolf Mountain<\/a>", + "Frozen Waste Plateau<\/a>", + "Asgarnian Ice Caves<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Icefiend#God Wars Dungeon", + "weakness": [], + "creatures": [ + "Icefiend", + "Icefiend (Ghorrock)", + "Revenant icefiend" + ], + "hidden-creatures": ["Icefiend (Ghorrock)"], + "index": "Icefiends", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Ice mountain<\/a>", + "God Wars Dungeon<\/a>", + "Ghorrock<\/a>" + ] + }, + { + "default-creature": "Infernal Mage#Default", + "weakness": [], + "creatures": [ + "Infernal Mage", + "Infernal Mage (elite)" + ], + "hidden-creatures": ["Infernal Mage (elite)"], + "index": "Infernal mages", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": [ + "Slayer Tower<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Iron dragon#Default", + "weakness": [], + "creatures": ["Iron dragon"], + "hidden-creatures": [], + "index": "Iron dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Ghorrock<\/a>", + "Kuradal's Dungeon<\/a>" + ] + }, + { + "default-creature": "Jelly#Default", + "weakness": [], + "creatures": ["Jelly"], + "hidden-creatures": [], + "index": "Jellies", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Soul Wars<\/a>", + "Mahjarrat Ritual Site Cavern<\/a>" + ] + }, + { + "default-creature": "Jungle horror#Default", + "weakness": [], + "creatures": [ + "Jungle horror", + "Quetzathog", + "Sea horror" + ], + "hidden-creatures": [ + "Quetzathog", + "Sea horror" + ], + "index": "Jungle horrors", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Mos Le'Harmless<\/a>"] + }, + { + "default-creature": "Jungle strykewyrm#Default", + "weakness": [], + "creatures": ["Jungle strykewyrm"], + "hidden-creatures": [], + "index": "Jungle strykewyrms", + "alias": [], + "equipment": [], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Laniakea" + ], + "locations": ["South Feldip Hills<\/a>"] + }, + { + "default-creature": "Kal'gerion demon#Bloodchiller", + "weakness": [], + "creatures": [ + "Kal'gerion demon", + "Kal'gerion demon (The Shadow Reef)", + "Yor'Ger the Deceiver" + ], + "hidden-creatures": [], + "index": "Kal'gerion demons", + "alias": ["Kal'gerion demon"], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Kal'gerion resource dungeon<\/a>", + "Demonic Ruins<\/a>" + ] + }, + { + "default-creature": "Corrupted kalphite guardian#Default", + "weakness": [], + "creatures": [ + "Corrupted kalphite guardian", + "Corrupted kalphite marauder", + "Exiled Kalphite Queen", + "Exiled kalphite guardian", + "Exiled kalphite marauder", + "Exiled kalphite paragon", + "Exiled kalphite soldier", + "Exiled kalphite worker", + "Kalphite Guardian", + "Kalphite King", + "Kalphite Queen", + "Kalphite Soldier", + "Kalphite Worker" + ], + "hidden-creatures": [ + "Exiled kalphite guardian", + "Exiled kalphite marauder", + "Exiled kalphite paragon" + ], + "index": "Kalphite", + "alias": ["Kalphites"], + "equipment": [], + "masters": [ + "Vannaka", + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Kalphite Lair<\/a>", + "Exiled Kalphite Hive<\/a>" + ] + }, + { + "default-creature": "Killerwatt#Default", + "weakness": [], + "creatures": ["Killerwatt"], + "hidden-creatures": [], + "index": "Killerwatts", + "alias": [], + "equipment": ["Insulated boots<\/a>"], + "masters": ["Mazchna"], + "locations": ["Killerwatt plane<\/a>"] + }, + { + "default-creature": "Kurask#Examine #1", + "weakness": [], + "creatures": ["Kurask"], + "hidden-creatures": [], + "index": "Kurask", + "alias": ["Kurasks"], + "equipment": [ + "Leaf-bladed sword<\/a>", + "Leaf-bladed spear<\/a>", + "Slayer Dart<\/a>", + "Broad arrows<\/a>", + "Broad-tipped bolts<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "Lava strykewyrm#Default", + "weakness": [], + "creatures": [ + "Engorged lava strykewyrm", + "Lava strykewyrm", + "Lava strykewyrm (Dragonkin Laboratory)", + "WildyWyrm (2015, historical)" + ], + "hidden-creatures": [ + "Engorged lava strykewyrm", + "Lava strykewyrm (Dragonkin Laboratory)" + ], + "index": "Lava strykewyrms", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": ["Wilderness<\/a>"] + }, + { + "default-creature": "Lesser demon#1", + "weakness": [], + "creatures": [ + "Lesser demon", + "Lesser demon (Wizards' Tower)", + "Zakl'n Gritch" + ], + "hidden-creatures": [], + "index": "Lesser demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Mazchna", + "Chaeldar", + "Laniakea" + ], + "locations": [ + "Wizards' Tower<\/a>", + "Resource dungeon<\/a>", + "Karamja Dungeon<\/a>", + "Crandor<\/a>", + "Melzar's Maze<\/a>", + "Demonic Ruins<\/a>", + "Clan Wars<\/a>", + "Lava Maze<\/a>", + "Wilderness Crater<\/a>" + ] + }, + { + "default-creature": "Living rock patriarch#Default", + "weakness": [], + "creatures": [ + "Living rock patriarch", + "Living rock protector", + "Living rock striker" + ], + "hidden-creatures": [], + "index": "Living rock creatures", + "alias": [], + "equipment": [], + "masters": ["Kuradal"], + "locations": ["Living rock caverns<\/a>"] + }, + { + "default-creature": "Wyvern#Default", + "weakness": [], + "creatures": [ + "Wyvern", + "Wyvern (elite)" + ], + "hidden-creatures": ["Wyvern (elite)"], + "index": "Living wyverns", + "alias": [], + "equipment": [ + "Wyrmfire potion<\/a>", + "Dragonfire shield<\/a>", + "Elemental Workshop shield<\/a>" + ], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Asgarnian Ice Dungeon<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Minotaur#Level 12", + "weakness": [], + "creatures": ["Minotaur"], + "hidden-creatures": [], + "index": "Minotaurs", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": ["Stronghold of Security<\/a>"] + }, + { + "default-creature": "Mithril dragon#Default", + "weakness": [], + "creatures": ["Mithril dragon"], + "hidden-creatures": [], + "index": "Mithril dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Ancient Cavern<\/a>"] + }, + { + "default-creature": "Mogre#Default", + "weakness": [], + "creatures": ["Mogre"], + "hidden-creatures": [], + "index": "Mogres", + "alias": [], + "equipment": [ + "Super<\/a>", + "Fishing explosives<\/a>" + ], + "masters": ["Vannaka"], + "locations": ["Mudskipper Point<\/a>"] + }, + { + "default-creature": "Molanisk#Default", + "weakness": [], + "creatures": ["Molanisk"], + "hidden-creatures": [], + "index": "Molanisks", + "alias": [], + "equipment": ["Slayer bell<\/a>"], + "masters": ["Mazchna"], + "locations": ["Dorgesh-Kaan South Dungeon<\/a>"] + }, + { + "default-creature": "Moss giant#Common (1)", + "weakness": [], + "creatures": ["Moss giant"], + "hidden-creatures": [], + "index": "Moss giants", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Mazchna" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Crandor Isle<\/a>", + "Fishing Guild<\/a>", + "Moss Giant Island<\/a>", + "Wilderness<\/a>", + "Varrock Sewers<\/a>", + "Pirates' Cove<\/a>", + "Chaos Tunnels<\/a>", + "Glarial's Tomb<\/a>" + ] + }, + { + "default-creature": "Bladed muspah#Default", + "weakness": [], + "creatures": [ + "Bladed muspah", + "Force muspah", + "Throwing muspah" + ], + "hidden-creatures": [], + "index": "Muspah", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Freneskae<\/a>"] + }, + { + "default-creature": "Mutated jadinko baby#Default", + "weakness": [], + "creatures": [ + "Mutated jadinko baby", + "Mutated jadinko guard", + "Mutated jadinko male" + ], + "hidden-creatures": [], + "index": "Mutated jadinkos", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Jadinko Lair<\/a>"] + }, + { + "default-creature": "Mutated zygomite#Level 58", + "weakness": [], + "creatures": ["Mutated zygomite"], + "hidden-creatures": [], + "index": "Mutated zygomites", + "alias": [], + "equipment": ["Fungicide spray<\/a>"], + "masters": ["Chaeldar"], + "locations": ["Zanaris<\/a>"] + }, + { + "default-creature": "Nechryael#Default", + "weakness": [], + "creatures": [ + "Nechryael", + "Nechryael (Heart of Gielinor)", + "Nechryael (elite)" + ], + "hidden-creatures": [ + "Nechryael (Heart of Gielinor)", + "Nechryael (elite)" + ], + "index": "Nechryael", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran" + ], + "locations": [ + "Slayer Tower<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Nightmare#Default", + "weakness": [], + "creatures": ["Nightmare"], + "hidden-creatures": [], + "index": "Nightmare creatures", + "alias": ["Nightmare"], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Freneskae (Ritual Site)<\/a>"] + }, + { + "default-creature": "Blood nihil#normal", + "weakness": [], + "creatures": [ + "Blood nihil", + "Ice nihil", + "Shadow nihil", + "Smoke nihil" + ], + "hidden-creatures": [], + "index": "Nihil", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Freneskae (the Pit)<\/a>"] + }, + { + "default-creature": "Nodon guard#Default", + "weakness": [], + "creatures": [ + "Kerapac, the bound", + "Nodon artificer", + "Nodon enforcer", + "Nodon engineer", + "Nodon guard", + "Nodon hunter", + "Siege engine" + ], + "hidden-creatures": [], + "index": "Nodon dragonkin", + "alias": [], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["Nodon Front<\/a>"] + }, + { + "default-creature": "Enclave guard#Default", + "weakness": [], + "creatures": [ + "Enclave guard", + "Mogre", + "Ogre", + "Ogre chieftain", + "Ogress", + "Ogress champion", + "Ogress warrior", + "Skogre", + "Zogre" + ], + "hidden-creatures": ["Skogre"], + "index": "Ogres", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Yanille<\/a>", + "Castle Wars<\/a>", + "Gu'Tanoth<\/a>", + "Chaos Druid Tower<\/a>", + "Clock Tower Dungeon<\/a>", + "Witchaven Dungeon<\/a>", + "Underground Pass (dungeon)<\/a>", + "Combat Training Camp<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Onyx dragon#Default", + "weakness": [], + "creatures": ["Onyx dragon"], + "hidden-creatures": [], + "index": "Onyx dragons", + "alias": [], + "equipment": ["Super anti-fire potion<\/a>"], + "masters": ["Mandrith"], + "locations": [ + "Gemstone cavern<\/a>", + "Wilderness<\/a>", + "Deep Wilderness Dungeon<\/a>" + ] + }, + { + "default-creature": "Otherworldly being#Default", + "weakness": [], + "creatures": ["Otherworldly being"], + "hidden-creatures": [], + "index": "Otherworldly beings", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": ["Zanaris<\/a>"] + }, + { + "default-creature": "Pyrefiend#Level 38", + "weakness": [], + "creatures": [ + "Pyrefiend", + "Pyrefiend (The Zamorakian Undercity)", + "Pyrefiend (summoned)", + "Revenant pyrefiend", + "Seething Pyrefiend", + "Smoulders", + "Smoulders, the Revenger" + ], + "hidden-creatures": [], + "index": "Pyrefiends", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Smoke Dungeon<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Warped rat#Default", + "weakness": [], + "creatures": [ + "Angry giant rat", + "Brine rat", + "Crypt rat", + "Dungeon rat", + "Giant crypt rat", + "Giant rat", + "Rat", + "Warped rat" + ], + "hidden-creatures": [], + "index": "Rats", + "alias": [], + "equipment": [], + "masters": ["Jacquelyn"], + "locations": [] + }, + { + "default-creature": "Red dragon#1", + "weakness": [], + "creatures": [ + "Baby red dragon", + "Red dragon", + "Red dragon (Dragonkin Laboratory)", + "Sangri the Red" + ], + "hidden-creatures": [ + "Red dragon (Dragonkin Laboratory)", + "Sangri the Red" + ], + "index": "Red dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Sumona", + "Laniakea" + ], + "locations": [ + "Red Dragon Isle<\/a>", + "Brimhaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Revenant cyclops#Default", + "weakness": [], + "creatures": [ + "Revenant cyclops", + "Revenant dark beast", + "Revenant demon", + "Revenant dragon", + "Revenant goblin", + "Revenant hellhound", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant knight", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf" + ], + "hidden-creatures": [], + "index": "Revenants", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": ["Forinthry Dungeon<\/a>"] + }, + { + "default-creature": "Ripper Demon#Default", + "weakness": [], + "creatures": [ + "Ripper Demon", + "Slasher Demon" + ], + "hidden-creatures": ["Slasher Demon"], + "index": "Ripper demons", + "alias": ["Ripper Demon"], + "equipment": [], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Ripper Demon cave<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Risen ghost#Default", + "weakness": [], + "creatures": ["Risen ghost"], + "hidden-creatures": [], + "index": "Risen ghosts", + "alias": ["Risen ghost"], + "equipment": [], + "masters": ["The Raptor"], + "locations": [ + "Crypt (Wilderness)<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Rock slug#Default", + "weakness": [], + "creatures": ["Rock slug"], + "hidden-creatures": [], + "index": "Rockslugs", + "alias": ["Rock slugs"], + "equipment": ["Bag of salt<\/a>"], + "masters": ["Mazchna"], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Lumbridge Swamp Caves<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>" + ] + }, + { + "default-creature": "Rune dragon#Armoured", + "weakness": [], + "creatures": [ + "Elite rune dragon", + "Rune dragon" + ], + "hidden-creatures": ["Elite rune dragon"], + "index": "Rune dragons", + "alias": ["Rune dragon"], + "equipment": ["Super antifire<\/a>"], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["Mount Firewake<\/a>"] + }, + { + "default-creature": "Scarab akh#Default", + "weakness": [], + "creatures": [ + "Corrupted scarab", + "Locust lancer", + "Locust ranger", + "Locust rider", + "Scabaras lancer", + "Scabaras mage", + "Scabaras ranger", + "Scarab akh", + "Scarab mage", + "Small scarab" + ], + "hidden-creatures": [], + "index": "Scabarites", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel" + ], + "locations": [ + "Sophanem<\/a>", + "Agility pyramid<\/a>", + "Dealing with Scabaras<\/a>" + ] + }, + { + "default-creature": "Corrupted scorpion#Default", + "weakness": [], + "creatures": [ + "Corrupted scorpion", + "Grave scorpion", + "King Scorpion", + "Pit Scorpion", + "Poison Scorpion", + "Scorpion", + "Scorpion (Ape Atoll)" + ], + "hidden-creatures": [ + "Grave scorpion", + "King Scorpion", + "Pit Scorpion", + "Poison Scorpion", + "Scorpion (Ape Atoll)" + ], + "index": "Scorpions", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Sumona" + ], + "locations": [ + "Al Kharid mining site<\/a>", + "Dwarven mines<\/a>", + "Ardougne Zoo<\/a>", + "Scorpion Pit<\/a>", + "Stronghold of Security<\/a>", + "Varrock Sewers<\/a>", + "Wilderness<\/a>", + "Karamja Volcano<\/a>" + ] + }, + { + "default-creature": "Sea Snake Hatchling#Default", + "weakness": [], + "creatures": [ + "Sea Snake Hatchling", + "Sea Snake Young" + ], + "hidden-creatures": [], + "index": "Sea snakes", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": ["Miscellania & Etceteria Dungeon<\/a>"] + }, + { + "default-creature": "Shade#Default", + "weakness": [], + "creatures": ["Shade"], + "hidden-creatures": [], + "index": "Shades", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Stronghold of Security<\/a>", + "Mort'ton<\/a>", + "Shade Catacombs<\/a>", + "Temple Trekking<\/a>" + ] + }, + { + "default-creature": "Manifest shadow#Default", + "weakness": [], + "creatures": [ + "Blissful shadow", + "Manifest shadow", + "Shadow (Temple of Light)", + "Truthful shadow" + ], + "hidden-creatures": [], + "index": "Shadow creatures", + "alias": [], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": [ + "Temple of Light<\/a>", + "Prifddinas<\/a>", + "Amlodd Clan<\/a>" + ] + }, + { + "default-creature": "Shadow warrior#Default", + "weakness": [], + "creatures": ["Shadow warrior"], + "hidden-creatures": [], + "index": "Shadow warriors", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Legends' Guild<\/a>"] + }, + { + "default-creature": "Skeletal Wyvern#1", + "weakness": [], + "creatures": ["Skeletal Wyvern"], + "hidden-creatures": [], + "index": "Skeletal wyverns", + "alias": [], + "equipment": [ + "Wyrmfire potion<\/a>", + "Dragonfire shield<\/a>", + "Elemental Workshop shield<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal" + ], + "locations": ["Asgarnian Ice Dungeon<\/a>"] + }, + { + "default-creature": "Skeleton (Lumbridge Catacombs)#Default", + "weakness": [], + "creatures": [ + "Ankou", + "Ankou (elite)", + "Baby Dinosaur Skeleton", + "Bossy McBossFace's First mate", + "Bound skeleton", + "Giant skeleton (Shadow Dungeon)", + "Giant skeleton (Tarn's Lair)", + "Huge skeleton", + "Osseous", + "Skeletal Wyvern", + "Skeletal hand", + "Skeletal miner", + "Skeletal shielder", + "Skeleton", + "Skeleton (Ape Atoll)", + "Skeleton (Barrows)", + "Skeleton (Dark Warriors' Fortress)", + "Skeleton (Heart of Gielinor)", + "Skeleton (Lumbridge Catacombs)", + "Skeleton (Tarn's Lair)", + "Skeleton (Temple Trekking)", + "Skeleton (Ullek)", + "Skeleton (Uncharted Isles)", + "Skeleton Archer", + "Skeleton Mage", + "Skeleton archer (Ancient Awakening)", + "Skeleton brute", + "Skeleton fremennik", + "Skeleton heavy", + "Skeleton hero", + "Skeleton knight", + "Skeleton ranger (Ancient Awakening)", + "Skeleton thug", + "Skeleton warlord", + "Skeleton warrior (Ancient Awakening)", + "Skeleton warrior (Rasial)", + "Skoblin", + "Skogre", + "Summoned skeleton", + "Summoned skeleton archer", + "Training dummy", + "Undead one", + "Warped skeleton" + ], + "hidden-creatures": [ + "Skeletal miner", + "Skeleton (Tarn's Lair)", + "Skeleton (Temple Trekking)", + "Skeleton fremennik", + "Undead one" + ], + "index": "Skeletons", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka", + "The Raptor" + ], + "locations": [ + "Lumbridge Catacombs<\/a>", + "Edgeville Dungeon<\/a>", + "Digsite Dungeon<\/a>", + "Draynor Sewers<\/a>", + "Karamja Volcano<\/a>", + "Ogre Enclave<\/a>", + "Steel Mine<\/a>", + "Stronghold of Security<\/a>", + "Taverley Dungeon<\/a>", + "Temple of Ikov<\/a>", + "Varrock Sewers<\/a>", + "Waterfall Dungeon<\/a>", + "Barrows<\/a>", + "Chaos Tunnels<\/a>", + "Ruins of Ullek<\/a>", + "Melzar's Maze<\/a>", + "Wilderness Crater<\/a>", + "Ape Atoll Dungeon<\/a>", + "Senntisten Temple<\/a>", + "Underground Pass (dungeon)<\/a>", + "crypt<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "The Magister#Default", + "weakness": [], + "creatures": [ + "Crocodile akh", + "Feline akh", + "Gorilla akh", + "Imperial mage akh", + "Imperial ranger akh", + "Imperial warrior akh", + "Oreb, the Magister", + "Salawa akh", + "Scarab akh", + "The Magister" + ], + "hidden-creatures": ["Oreb, the Magister"], + "index": "Soul devourers", + "alias": [ + "Crocodile akh", + "Feline akh", + "Gorilla akh", + "Imperial guard akh", + "Salawa akh", + "Scarab akh", + "Soul devourer" + ], + "equipment": ["Feather of Ma'at<\/a>"], + "masters": [ + "Sumona", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Sophanem Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Soulgazer#Default", + "weakness": [], + "creatures": [ + "Soulgazer", + "Soulgazer (elite)" + ], + "hidden-creatures": ["Soulgazer (elite)"], + "index": "Soulgazers", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Stalker Dungeon<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Deadly red spider#Default", + "weakness": [], + "creatures": [ + "Corpse spider", + "Crypt spider", + "Deadly red spider", + "Fever spider", + "Giant crypt spider", + "Giant spider", + "Ice spider", + "Jungle spider", + "Lava spider", + "Poison spider", + "Shadow spider", + "Spider", + "Spyndra" + ], + "hidden-creatures": [], + "index": "Spiders", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Melzar's Maze<\/a>", + "Sorceress<\/a>", + "Lumbridge Castle<\/a>", + "Stronghold of Security<\/a>", + "Ape Atoll<\/a>", + "Ogre Enclave<\/a>", + "Wilderness<\/a>", + "Karamja<\/a>", + "Underground Pass<\/a>" + ] + }, + { + "default-creature": "Spiritual mage#Armadyl", + "weakness": [], + "creatures": ["Spiritual mage"], + "hidden-creatures": [], + "index": "Spiritual mages", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": ["God Wars Dungeon<\/a>"] + }, + { + "default-creature": "Spiritual warrior#Armadyl", + "weakness": [], + "creatures": ["Spiritual warrior"], + "hidden-creatures": [], + "index": "Spiritual warriors", + "alias": [], + "equipment": [], + "masters": ["Sumona"], + "locations": ["God Wars Dungeon<\/a>"] + }, + { + "default-creature": "Veil-ripper Ozharakha#Default", + "weakness": [], + "creatures": [ + "Seeker", + "Soulgazer", + "Soulgazer (elite)", + "Veil-ripper Ozharakha" + ], + "hidden-creatures": ["Soulgazer (elite)"], + "index": "Stalker creatures", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Stalker dungeon<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Steel dragon#Default", + "weakness": [], + "creatures": ["Steel dragon"], + "hidden-creatures": [], + "index": "Steel dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Kuradal's Dungeon<\/a>", + "Brimhaven Dungeon<\/a>", + "Ghorrock<\/a>" + ] + }, + { + "default-creature": "Desert strykewyrm#Default", + "weakness": [], + "creatures": [ + "Desert strykewyrm", + "Ice strykewyrm", + "Jungle strykewyrm", + "Lava strykewyrm", + "Lava strykewyrm (Dragonkin Laboratory)", + "WildyWyrm (2015, historical)" + ], + "hidden-creatures": ["WildyWyrm (2015, historical)"], + "index": "Strykewyrms", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": [] + }, + { + "default-creature": "Suqah#Level 73 (Dual wielding swords)", + "weakness": [], + "creatures": ["Suqah"], + "hidden-creatures": [], + "index": "Suqahs", + "alias": ["Suqah"], + "equipment": [ + "Seal of passage<\/a>", + "Moon Clan<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal" + ], + "locations": ["Lunar Isle<\/a>"] + }, + { + "default-creature": "Terror dog#Level 61", + "weakness": [], + "creatures": ["Terror dog"], + "hidden-creatures": [], + "index": "Terror dogs", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Kuradal" + ], + "locations": ["Tarn's Lair<\/a>"] + }, + { + "default-creature": "Tormented demon#Standard", + "weakness": [], + "creatures": ["Tormented demon"], + "hidden-creatures": [], + "index": "Tormented demons", + "alias": ["Tormented demon"], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Ancient Guthix Temple<\/a>"] + }, + { + "default-creature": "Ice troll runt#Default", + "weakness": [], + "creatures": [ + "Ghostly troll bruiser", + "Ghostly troll thrower", + "Ice troll", + "Ice troll female", + "Ice troll grunt", + "Ice troll male", + "Ice troll runt", + "Kraka", + "Mountain troll", + "Mountain troll (well)", + "Pee Hat", + "River troll", + "Rock (monster)", + "Stick", + "Stove", + "Thrower Troll", + "Troll brute", + "Troll brute (Davendale)", + "Troll chucker", + "Troll chucker (Davendale)", + "Troll general", + "Troll lout", + "Troll shaman", + "Troll shaman (Davendale)", + "Troll spectator", + "Undead troll" + ], + "hidden-creatures": [ + "Mountain troll (well)", + "Stove", + "Troll brute (Davendale)" + ], + "index": "Trolls", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Mountain trolls<\/a>", + "Trollheim<\/a>", + "Keldagrim<\/a>", + "Death Plateau<\/a>", + "Burthorpe Troll Cave<\/a>", + "Troll cave<\/a>", + "Ice trolls<\/a>", + "Fremennik Isles<\/a>", + "Undead trolls<\/a>", + "Lucien's camp<\/a>" + ] + }, + { + "default-creature": "Turoth#60 - Large", + "weakness": [], + "creatures": ["Turoth"], + "hidden-creatures": [], + "index": "Turoth", + "alias": [], + "equipment": [ + "Leaf-bladed sword<\/a>", + "Leaf-bladed spear<\/a>", + "Slayer Dart<\/a>", + "Broad arrows<\/a>", + "Broad-tipped bolts<\/a>" + ], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "TzHaar-Hur#Level 86", + "weakness": [], + "creatures": [ + "TzHaar-Hur", + "TzHaar-Ket", + "TzHaar-Mej", + "TzHaar-Xil" + ], + "hidden-creatures": [], + "index": "TzHaar", + "alias": ["Volcanic creatures"], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran" + ], + "locations": ["TzHaar city<\/a>"] + }, + { + "default-creature": "Ghost#1", + "weakness": [], + "creatures": [ + "Aberrant spectre", + "Ahrim the Blighted", + "Akrisae the Doomed", + "Animated spade", + "Ankou", + "Ankou (elite)", + "Armoured phantom", + "Armoured zombie", + "Banshee", + "Bloated monstrosity", + "Bound skeleton", + "Corpse archer", + "Corpse carrier", + "Corpse mage", + "Corpse spider", + "Crawling corpse torso", + "Crawling hand", + "Dharok the Wretched", + "Dragith Nurn", + "Edimmu", + "Edimmu (elite)", + "Fetid zombie", + "General malpractitioner", + "Ghast", + "Ghost", + "Ghost (Abandoned Mine)", + "Ghost (Ourania Runecrafting Altar)", + "Ghost (Shattered Worlds)", + "Ghost (Spirit of Summer)", + "Ghost (Stronghold of Security)", + "Ghostly troll bruiser", + "Ghostly troll thrower", + "Graveside Phantom", + "Guthan the Infested", + "Karil the Tainted", + "Linza the Disgraced", + "Magic axe", + "Masuta the Descended", + "Mighty banshee", + "Monkey Zombie", + "Mummy (Jaldraocht Pyramid)", + "Mummy (Ullek)", + "Osseous", + "Phantom sorcerer", + "Phantom wizard", + "Possessed pickaxe", + "Possessed pickaxe (Lava Flow Mine)", + "Putrid zombie (Rasial)", + "Revenant cyclops", + "Revenant dark beast", + "Revenant demon", + "Revenant dragon", + "Revenant goblin", + "Revenant hellhound", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant knight", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf", + "Risen ghost", + "Shade", + "Shadow warrior", + "Skeletal Wyvern", + "Skeletal hand", + "Skeletal miner", + "Skeleton", + "Skeleton (Lumbridge Catacombs)", + "Skeleton (Tarn's Lair)", + "Skeleton Mage", + "Skeleton archer (Ancient Awakening)", + "Skeleton knight", + "Skeleton ranger (Ancient Awakening)", + "Skeleton warrior (Ancient Awakening)", + "Skeleton warrior (Rasial)", + "Skoblin", + "Skogre", + "Small scarab", + "Soulless armoured zombie", + "Soulless unarmoured zombie", + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior", + "Taraket the Necromancer", + "Torag the Corrupted", + "Tormented wraith", + "Training dummy", + "Undead chicken", + "Undead cow", + "Undead giant (Battle of Forinthry)", + "Undead one", + "Undead pekin", + "Undead troll", + "Unstable zombie", + "Verac the Defiled", + "Vorkath", + "Wight", + "Wight ranger", + "Wight ranger (Sliske's Endgame)", + "Zogre", + "Zombie", + "Zombie (New Varrock)", + "Zombie cow (New Varrock)", + "Zombie hand", + "Zombie knight", + "Zombie pirate", + "Zombie swab", + "Zombie warrior" + ], + "hidden-creatures": [ + "Wight", + "Wight ranger", + "Wight ranger (Sliske's Endgame)" + ], + "index": "Undead", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [] + }, + { + "default-creature": "Vampyre#Default", + "weakness": [], + "creatures": [ + "Angry vampyre", + "Feral vampyre", + "Revenant vampyre", + "Vampyre", + "Vampyre Juvenile", + "Vampyre Juvinate" + ], + "hidden-creatures": ["Feral vampyre"], + "index": "Vampyres", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "God Wars Dungeon<\/a>", + "Haunted Woods<\/a>", + "Abandoned Mine<\/a>" + ] + }, + { + "default-creature": "Liverworts#Default", + "weakness": [], + "creatures": [ + "Devil's snare", + "Lampenflora", + "Liverworts", + "Luminous snaggler" + ], + "hidden-creatures": [], + "index": "Vile blooms", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": ["Anachronia<\/a>"] + }, + { + "default-creature": "Vyrewatch#Level 70", + "weakness": [], + "creatures": [ + "Vyrelady", + "Vyrelord", + "Vyrewatch" + ], + "hidden-creatures": [], + "index": "Vyrewatch", + "alias": [], + "equipment": [ + "Ivandis flail<\/a>", + "Blisterwood polearm<\/a>", + "Blisterwood staff<\/a>", + "Blisterwood stake<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Darkmeyer<\/a>", + "Burgh de Rott Woods<\/a>", + "Meiyerditch<\/a>" + ] + }, + { + "default-creature": "Wall beast#Default", + "weakness": [], + "creatures": ["Wall beast"], + "hidden-creatures": [], + "index": "Wall beasts", + "alias": [], + "equipment": [ + "Spiny helmet<\/a>", + "Spiked helmet<\/a>", + "Slayer helmet<\/a>" + ], + "masters": ["Vannaka"], + "locations": ["Lumbridge Swamp Caves<\/a>"] + }, + { + "default-creature": "Warped terrorbird#1", + "weakness": [], + "creatures": ["Warped terrorbird"], + "hidden-creatures": [], + "index": "Warped terrorbirds", + "alias": [], + "equipment": ["Crystal chime<\/a>"], + "masters": ["Duradel"], + "locations": ["Poison Waste Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Warped tortoise#Vulnerable", + "weakness": [], + "creatures": ["Warped tortoise"], + "hidden-creatures": [], + "index": "Warped tortoises", + "alias": [], + "equipment": ["Crystal chime<\/a>"], + "masters": [ + "Chaeldar", + "Sumona", + "Kuradal" + ], + "locations": ["Poison Waste Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Waterfiend#Default", + "weakness": [], + "creatures": [ + "Maelstrom, Raging Waterfiend", + "Torrential Waterfiend", + "Torrential Waterfiend (summoned)", + "Waterfiend", + "Waterfiend (Ghorrock)", + "Waterfiend (Temple of Aminishi)", + "Waterfiend (The Zamorakian Undercity)", + "Waterfiend (elite)", + "Waterfiend (summoned)" + ], + "hidden-creatures": [ + "Waterfiend (Ghorrock)", + "Waterfiend (Temple of Aminishi)", + "Waterfiend (elite)" + ], + "index": "Waterfiends", + "alias": [], + "equipment": [], + "masters": [ + "Duradel", + "Kuradal", + "Morvran" + ], + "locations": [ + "Ancient Cavern<\/a>", + "Chaos Tunnels<\/a>", + "Ghorrock<\/a>" + ] + }, + { + "default-creature": "Werewolf#Alexis", + "weakness": [], + "creatures": ["Werewolf"], + "hidden-creatures": [], + "index": "Werewolves", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Canifis<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Adolescent White wolf#Default", + "weakness": [], + "creatures": [ + "Adolescent White wolf", + "Big Wolf", + "Desert wolf", + "Dire Wolf", + "Fenris wolf", + "Fenris wolf (Sköll)", + "Ice wolf", + "Jungle Wolf", + "White wolf", + "Wolf" + ], + "hidden-creatures": [ + "Fenris wolf", + "Fenris wolf (Sköll)" + ], + "index": "Wolves", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Vannaka" + ], + "locations": [ + "Stronghold of Security<\/a>", + "White Wolf Mountain<\/a>", + "Feldip Hills<\/a>" + ] + }, + { + "default-creature": "Armoured phantom#1", + "weakness": [], + "creatures": [ + "Armoured phantom", + "Bound skeleton", + "Fetid zombie", + "Risen ghost" + ], + "hidden-creatures": [], + "index": "Zemouregal's undead", + "alias": [], + "equipment": [], + "masters": ["The Raptor"], + "locations": [ + "Crypt<\/a>", + "Wilderness<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Zombie#Level 29", + "weakness": [], + "creatures": [ + "Armoured zombie", + "Armoured zombie (The Shadow Reef)", + "Armoured zombie (Uncharted Isles)", + "Bloated monstrosity", + "Bossy McBossFace", + "Corpse archer", + "Corpse carrier", + "Corpse mage", + "Corpse spider", + "Crawling corpse torso", + "Crawling hand", + "Dragith Nurn", + "Dried zombie", + "Edimmu", + "Edimmu (elite)", + "Empowering zombie", + "Fetid zombie", + "General malpractitioner", + "Monkey Zombie", + "Mummy (Jaldraocht Pyramid)", + "Mummy (Ullek)", + "Putrid zombie (Rasial)", + "Small scarab", + "Soulless armoured zombie", + "Soulless unarmoured zombie", + "Summoned Zombie", + "Summoned Zombie (The Shadow Reef)", + "Summoned armoured zombie", + "Ulthven Keith", + "Undead Witch", + "Undead chicken", + "Undead cow", + "Undead giant (Battle of Forinthry)", + "Undead one", + "Undead pekin", + "Undead troll", + "Unstable zombie", + "Zogre", + "Zombie", + "Zombie (Lair of Tarn Razorlor)", + "Zombie (New Varrock)", + "Zombie (Stronghold of Security)", + "Zombie (Temple Trekking)", + "Zombie (The Shadow Reef)", + "Zombie (Uncharted Isles)", + "Zombie (Wilderness)", + "Zombie (Zogre Flesh Eaters)", + "Zombie cow (New Varrock)", + "Zombie hand", + "Zombie knight", + "Zombie pirate", + "Zombie swab", + "Zombie warrior" + ], + "hidden-creatures": [ + "Zombie (Zogre Flesh Eaters)", + "Zombie cow (New Varrock)" + ], + "index": "Zombies", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka", + "The Raptor" + ], + "locations": [ + "Gnome Village Dungeon<\/a>", + "Entrana Dungeon<\/a>", + "Edgeville Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Graveyard of Shadows<\/a>", + "Stronghold of Security<\/a>", + "Varrock Sewers<\/a>", + "Wizards' Guild<\/a>", + "Draynor Sewers<\/a>", + "lair of Tarn Razorlor<\/a>" + ] + } +] diff --git a/dist/data/old/creatures.json b/dist/data/old/creatures.json new file mode 100644 index 0000000..7b1fe5e --- /dev/null +++ b/dist/data/old/creatures.json @@ -0,0 +1,26988 @@ +[ + { + "name": "Aberrant spectre", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "60", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Pollnivneach Slayer Dungeon", + "slayer-exp": 123.19999694824219, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "224", + "max-necromancy": "0" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "60", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Slayer Tower", + "slayer-exp": 109.4000015258789, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "0" + } + ] + }, + { + "name": "Abyssal beast", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "105", + "experience": 1950, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 643.5, + "max-melee": "1415", + "weakness": ["<\/a>"], + "max-spec": "1415", + "name": "Default", + "slayer-exp": 1448.4000244140625, + "lifepoints": "39000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal demon", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "85", + "experience": 425, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 140.1999969482422, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 278, + "lifepoints": "8500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal demon (elite)", + "variants": [{ + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "85", + "experience": 1700, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 561, + "max-melee": "2016", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1069, + "lifepoints": "34000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal lord", + "variants": [{ + "image": "", + "level": "133", + "defence": "95", + "slayer-level": "115", + "experience": 3700, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1221, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "816", + "name": "Default", + "slayer-exp": 8235, + "lifepoints": "74000", + "max-ranged": "0", + "max-magic": "1163", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal savage", + "variants": [ + { + "image": "", + "level": "111", + "defence": "75", + "slayer-level": "95", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Asylum", + "slayer-exp": 423.20001220703125, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "816", + "max-necromancy": "0" + }, + { + "image": "", + "level": "111", + "defence": "75", + "slayer-level": "95", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 423.20001220703125, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "816", + "max-necromancy": "0" + } + ] + }, + { + "name": "Acheron mammoth", + "variants": [{ + "image": "", + "level": "135", + "defence": "95", + "slayer-level": "96", + "experience": 2531.199951171875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 835.2000122070312, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Default", + "slayer-exp": 3628.800048828125, + "lifepoints": "50625", + "max-ranged": "4412", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Adamant dragon", + "variants": [{ + "image": "", + "level": "116", + "defence": "87", + "slayer-level": "1", + "experience": 1640.5999755859375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 541.2999877929688, + "max-melee": "1120", + "weakness": ["<\/a>"], + "max-spec": "1300", + "name": "Default", + "slayer-exp": 655.5999755859375, + "lifepoints": "32812", + "max-ranged": "1120", + "max-magic": "1120", + "max-necromancy": "0" + }] + }, + { + "name": "Airut", + "variants": [ + { + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "92", + "experience": 843.7000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 278.3999938964844, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "1600", + "name": "Melee", + "slayer-exp": 800.2000122070312, + "lifepoints": "16875", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "92", + "experience": 843.7000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 278.3999938964844, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1600", + "name": "Ranged", + "slayer-exp": 800.2000122070312, + "lifepoints": "16875", + "max-ranged": "816", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ankou", + "variants": [{ + "image": "", + "level": "54", + "defence": "38", + "slayer-level": "1", + "experience": 307.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 101.4000015258789, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 98, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ankou (Kili's Knowledge IV)", + "variants": [{ + "image": "", + "level": "72", + "defence": "?", + "slayer-level": "1", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "624", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 313.6000061035156, + "lifepoints": "31000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ankou (elite)", + "variants": [{ + "image": "", + "level": "67", + "defence": "42", + "slayer-level": "1", + "experience": 1177.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 388.5, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 314, + "lifepoints": "23550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Aquanite", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "78", + "experience": 350, + "susceptible": ["<\/a>"], + "lifepoint-exp": 115.5, + "max-melee": "652", + "weakness": ["<\/a>"], + "max-spec": "652", + "name": "Default", + "slayer-exp": 212.60000610351562, + "lifepoints": "7000", + "max-ranged": "652", + "max-magic": "652", + "max-necromancy": "0" + }] + }, + { + "name": "Aquanite (elite)", + "variants": [{ + "image": "", + "level": "104", + "defence": "68", + "slayer-level": "78", + "experience": 1400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 462, + "max-melee": "1958", + "weakness": ["<\/a>"], + "max-spec": "1958", + "name": "Default", + "slayer-exp": 968, + "lifepoints": "28000", + "max-ranged": "1958", + "max-magic": "1958", + "max-necromancy": "0" + }] + }, + { + "name": "Armoured phantom", + "variants": [ + { + "image": "", + "level": "150", + "defence": "87", + "slayer-level": "113", + "experience": 2625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 866.2000122070312, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "7000", + "name": "1", + "slayer-exp": 2500, + "lifepoints": "52500", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "150", + "defence": "87", + "slayer-level": "113", + "experience": 2625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 866.2000122070312, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "7000", + "name": "2", + "slayer-exp": 2500, + "lifepoints": "52500", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "150", + "defence": "87", + "slayer-level": "113", + "experience": 2625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 866.2000122070312, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "7000", + "name": "3", + "slayer-exp": 2500, + "lifepoints": "52500", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + } + ] + }, + { + "name": "Capsarius", + "variants": [ + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "81", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 146.60000610351562, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "168", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "81", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 146.60000610351562, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "168", + "max-necromancy": "0" + } + ] + }, + { + "name": "Gladius", + "variants": [{ + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "81", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 220.1999969482422, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "624", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Primus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "3300", + "name": "Default", + "slayer-exp": 1938.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Quartus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Quintus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Secundus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Sextus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Tertius", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Rorarius", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "81", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "576", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "81", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "576", + "max-necromancy": "0" + } + ] + }, + { + "name": "Scutarius", + "variants": [ + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "81", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 390.20001220703125, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "81", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 390.20001220703125, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Aviansie", + "variants": [ + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 491.79998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 162.1999969482422, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee, level 89 (1)", + "slayer-exp": 170.39999389648438, + "lifepoints": "6400", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 491.79998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 162.1999969482422, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee, level 89 (2)", + "slayer-exp": 187.8000030517578, + "lifepoints": "6400", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "92", + "defence": "68", + "slayer-level": "1", + "experience": 542.2000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 178.89999389648438, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee, level 92", + "slayer-exp": 207.39999389648438, + "lifepoints": "6600", + "max-ranged": "264", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 491.79998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 162.1999969482422, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged, level 89", + "slayer-exp": 170.39999389648438, + "lifepoints": "6400", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 542.2000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 178.89999389648438, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged, level 92", + "slayer-exp": 187.8000030517578, + "lifepoints": "6600", + "max-ranged": "264", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 340, + "susceptible": ["<\/a>"], + "lifepoint-exp": 112.19999694824219, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged, level 95", + "slayer-exp": 207.39999389648438, + "lifepoints": "6800", + "max-ranged": "272", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Flight Kilisa", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "250", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 363.79998779296875, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Flockleader Geerin", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 363.79998779296875, + "lifepoints": "10000", + "max-ranged": "250", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kree'arra", + "variants": [ + { + "image": "", + "level": "580", + "defence": "75", + "slayer-level": "1", + "experience": 2500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 825, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Hard Mode", + "slayer-exp": 3912, + "lifepoints": "100000", + "max-ranged": "3000", + "max-magic": "700", + "max-necromancy": "0" + }, + { + "image": "", + "level": "580", + "defence": "75", + "slayer-level": "1", + "experience": 1875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 618.7000122070312, + "max-melee": "1676", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 2934.199951171875, + "lifepoints": "75000", + "max-ranged": "1080", + "max-magic": "1080", + "max-necromancy": "0" + }, + { + "image": "", + "level": "210", + "defence": "75", + "slayer-level": "N/A", + "experience": 2500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 825, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "The World Wakes", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "3000", + "max-magic": "700", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spiritual mage", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zamorak", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Armadyl", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Saradomin", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "350", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bandos", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "350", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "83", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 229, + "lifepoints": "1120", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spiritual ranger", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zamorak", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Armadyl", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Saradomin", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bandos", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "63", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 122, + "lifepoints": "1120", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spiritual warrior", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zamorak", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Armadyl", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Saradomin", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bandos", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "68", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 229, + "lifepoints": "1120", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Wingman Skree", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 363.79998779296875, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "900", + "max-necromancy": "?" + }] + }, + { + "name": "Banshee", + "variants": [{ + "image": "", + "level": "24", + "defence": "14", + "slayer-level": "15", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "990", + "name": "Default", + "slayer-exp": 46, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "440", + "max-necromancy": "0" + }] + }, + { + "name": "Mighty banshee", + "variants": [{ + "image": "", + "level": "61", + "defence": "38", + "slayer-level": "15", + "experience": 307.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 101.4000015258789, + "max-melee": "860", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 89.4000015258789, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "1020", + "max-necromancy": "0" + }] + }, + { + "name": "Basilisk", + "variants": [ + { + "image": "", + "level": "49", + "defence": "30", + "slayer-level": "40", + "experience": 240, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 79.19999694824219, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Large", + "slayer-exp": 79.5999984741211, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "30", + "slayer-level": "40", + "experience": 240, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 79.19999694824219, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Small", + "slayer-exp": 79.5999984741211, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Albino bat", + "variants": [{ + "image": "", + "level": "43", + "defence": "31", + "slayer-level": "1", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 18, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bat", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8.199999809265137, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "40", + "max-necromancy": "0" + }] + }, + { + "name": "Giant bat", + "variants": [ + { + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 18.799999237060547, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "23", + "defence": "17", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Brine Cavern", + "slayer-exp": 10.199999809265137, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped bat", + "variants": [{ + "image": "", + "level": "16", + "defence": "12", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9.199999809265137, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "240", + "max-necromancy": "0" + }] + }, + { + "name": "Angry bear", + "variants": [ + { + "image": "", + "level": "40", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "175", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A Soul's Bane", + "slayer-exp": 0, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bear cub", + "variants": [{ + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Black bear", + "variants": [{ + "image": "", + "level": "23", + "defence": "17", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 10.199999809265137, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Grizzly bear", + "variants": [ + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "460", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard", + "slayer-exp": 13, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "460", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Tirannwn", + "slayer-exp": 16.600000381469727, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Grizzly bear cub", + "variants": [{ + "image": "", + "level": "17", + "defence": "15", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bird", + "variants": [ + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Black", + "slayer-exp": 6.800000190734863, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green", + "slayer-exp": 6.800000190734863, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Chicken", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "White", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Chompy bird", + "variants": [{ + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 15, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.900000095367432, + "max-melee": "6", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.399999618530273, + "lifepoints": "300", + "max-ranged": "8", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Duck", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Male", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Female", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Land", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Duckling", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jubbly bird", + "variants": [{ + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "24", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7.599999904632568, + "lifepoints": "400", + "max-ranged": "32", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mounted terrorbird gnome", + "variants": [ + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": ["<\/a>"], + "lifepoint-exp": 87.4000015258789, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 46", + "slayer-exp": 19.600000381469727, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 307.5, + "susceptible": [], + "lifepoint-exp": 101.4000015258789, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 53", + "slayer-exp": 24.799999237060547, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Oomlie bird", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 570, + "susceptible": ["<\/a>"], + "lifepoint-exp": 188.10000610351562, + "max-melee": "1280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 85.19999694824219, + "lifepoints": "11400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pekin", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Penguin (monster)", + "variants": [{ + "image": "", + "level": "8", + "defence": "6", + "slayer-level": "1", + "experience": 77.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25.5, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7, + "lifepoints": "1550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pernicious parrot", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 185, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 34.20000076293945, + "lifepoints": "3700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Rooster", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Seagull", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Tenacious toucan", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 262.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 86.5999984741211, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "5250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Terrorbird", + "variants": [{ + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 17.200000762939453, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead chicken", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 11.5, + "max-melee": "75", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead pekin", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 11.5, + "max-melee": "75", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Balfrug Kreeyath", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 272.79998779296875, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "750", + "max-necromancy": "0" + }] + }, + { + "name": "Black demon", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 294.3999938964844, + "lifepoints": "9000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 564.4000244140625, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + } + ] + }, + { + "name": "Alanogard the Black", + "variants": [{ + "image": "", + "level": "117", + "defence": "75", + "slayer-level": "1", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1353", + "weakness": ["<\/a>"], + "max-spec": "5000", + "name": "Default", + "slayer-exp": 9794, + "lifepoints": "180000", + "max-ranged": "1353", + "max-magic": "1353", + "max-necromancy": "0" + }] + }, + { + "name": "Baby black dragon", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "150", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 43.20000076293945, + "lifepoints": "2500", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Black dragon", + "variants": [ + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "3", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "4", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "5", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + } + ] + }, + { + "name": "Black dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 1950, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 643.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1550, + "lifepoints": "39000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "King Black Dragon", + "variants": [{ + "image": "", + "level": "276", + "defence": "60", + "slayer-level": "1", + "experience": 2250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 742.5, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "4960", + "name": "Default", + "slayer-exp": 1050.5999755859375, + "lifepoints": "45000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "0" + }] + }, + { + "name": "Queen Black Dragon", + "variants": [ + { + "image": "", + "level": "900", + "defence": "80", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "2480", + "weakness": ["<\/a>"], + "max-spec": "6500", + "name": "Carapace", + "slayer-exp": 1693.199951171875, + "lifepoints": "36000", + "max-ranged": "2480", + "max-magic": "2480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "900", + "defence": "80", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "2480", + "weakness": [ + "<\/a>", + "<\/a>" + ], + "max-spec": "6500", + "name": "Crystal", + "slayer-exp": 1693.199951171875, + "lifepoints": "36000", + "max-ranged": "2480", + "max-magic": "2480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "900", + "defence": "80", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "2480", + "weakness": ["<\/a>"], + "max-spec": "6500", + "name": "Normal", + "slayer-exp": 1693.199951171875, + "lifepoints": "36000", + "max-ranged": "2480", + "max-magic": "2480", + "max-necromancy": "0" + } + ] + }, + { + "name": "Verak Lith", + "variants": [{ + "image": "", + "level": "1450", + "defence": "70", + "slayer-level": "1", + "experience": 15000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 4950, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "9000", + "name": "Default", + "slayer-exp": 27438, + "lifepoints": "600000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Verak Little", + "variants": [{ + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "180000", + "max-ranged": "1966", + "max-magic": "1966", + "max-necromancy": "?" + }] + }, + { + "name": "Bloodveld", + "variants": [{ + "image": "", + "level": "58", + "defence": "49", + "slayer-level": "50", + "experience": 512.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 169.10000610351562, + "max-melee": "680", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 84.4000015258789, + "lifepoints": "10250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bloodveld (God Wars Dungeon)", + "variants": [{ + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "50", + "experience": 330, + "susceptible": ["<\/a>"], + "lifepoint-exp": 108.9000015258789, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "6600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bloodveld (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "50", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated bloodveld", + "variants": [ + { + "image": "", + "level": "81", + "defence": "65", + "slayer-level": "50", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A", + "slayer-exp": 205.8000030517578, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "65", + "slayer-level": "50", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "B", + "slayer-exp": 205.8000030517578, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Baby blue dragon", + "variants": [{ + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 80, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 26.399999618530273, + "max-melee": "128", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 18.799999237060547, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "128", + "max-necromancy": "0" + }] + }, + { + "name": "Blue dragon", + "variants": [ + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "1", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "2", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "3", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "4", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "5", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + } + ] + }, + { + "name": "Vorkath", + "variants": [ + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 60411.6015625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19935.80078125, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Hard mode", + "slayer-exp": 31340.5, + "lifepoints": "1500000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 60411.6015625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19935.80078125, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "8500", + "name": "Normal mode", + "slayer-exp": 31340.5, + "lifepoints": "750000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Requiem for a Dragon", + "slayer-exp": 31340.5, + "lifepoints": "75001", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 60411.6015625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19935.80078125, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 31340.5, + "lifepoints": "375000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + } + ] + }, + { + "name": "Bound skeleton", + "variants": [ + { + "image": "", + "level": "70", + "defence": "65", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1194", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 420, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "65", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1194", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 420, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "65", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1194", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 420, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Brine rat", + "variants": [{ + "image": "", + "level": "43", + "defence": "30", + "slayer-level": "47", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "640", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 43.20000076293945, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bronze dragon", + "variants": [{ + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "409", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 124.5, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "409", + "max-necromancy": "0" + }] + }, + { + "name": "Camel Warrior", + "variants": [{ + "image": "", + "level": "132", + "defence": "93", + "slayer-level": "96", + "experience": 1006.2000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 332, + "max-melee": "912", + "weakness": ["<\/a>"], + "max-spec": "2678", + "name": "Default", + "slayer-exp": 4768.7998046875, + "lifepoints": "20125", + "max-ranged": "931", + "max-magic": "931", + "max-necromancy": "0" + }] + }, + { + "name": "Catablepon", + "variants": [{ + "image": "", + "level": "43", + "defence": "28", + "slayer-level": "1", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 74.5, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "700", + "max-necromancy": "0" + }] + }, + { + "name": "Cave bug", + "variants": [ + { + "image": "", + "level": "6", + "defence": "4", + "slayer-level": "7", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 6", + "slayer-exp": 7, + "lifepoints": "650", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "7", + "slayer-level": "7", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11", + "slayer-exp": 8, + "lifepoints": "1650", + "max-ranged": "180", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cave crawler", + "variants": [ + { + "image": "", + "level": "24", + "defence": "15", + "slayer-level": "10", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 24", + "slayer-exp": 24.5, + "lifepoints": "2650", + "max-ranged": "400", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "59", + "defence": "40", + "slayer-level": "10", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 59", + "slayer-exp": 57.599998474121094, + "lifepoints": "6500", + "max-ranged": "900", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cave horror", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "58", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 99.4000015258789, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cave horror (elite)", + "variants": [{ + "image": "", + "level": "86", + "defence": "75", + "slayer-level": "58", + "experience": 550, + "susceptible": ["<\/a>"], + "lifepoint-exp": 181.5, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 509, + "lifepoints": "11000", + "max-ranged": "0", + "max-magic": "660", + "max-necromancy": "0" + }] + }, + { + "name": "Unspeakable horror", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "58", + "experience": 650, + "susceptible": ["<\/a>"], + "lifepoint-exp": 214.5, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "13000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Unspeakable horror (elite)", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "58", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1241.5999755859375, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }] + }, + { + "name": "Cave slime", + "variants": [{ + "image": "", + "level": "22", + "defence": "19", + "slayer-level": "17", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 11, + "lifepoints": "3150", + "max-ranged": "240", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant slime", + "variants": [ + { + "image": "", + "level": "106", + "defence": "60", + "slayer-level": "1", + "experience": 6000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1980, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": 5047, + "lifepoints": "120000", + "max-ranged": "1400", + "max-magic": "1400", + "max-necromancy": "0" + }, + { + "image": "", + "level": "106", + "defence": "60", + "slayer-level": "1", + "experience": 6000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1980, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": 2523.39990234375, + "lifepoints": "120000", + "max-ranged": "1400", + "max-magic": "1400", + "max-necromancy": "0" + } + ] + }, + { + "name": "Laboratory slime", + "variants": [ + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "1", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Adult (normal mode)", + "slayer-exp": 551, + "lifepoints": "20000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "N/A", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Spawnling (normal mode)", + "slayer-exp": -2, + "lifepoints": "9500", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "1", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Adult (story mode)", + "slayer-exp": 275.3999938964844, + "lifepoints": "9500", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "N/A", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Spawnling (story mode)", + "slayer-exp": -2, + "lifepoints": "9500", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Astellarn", + "variants": [{ + "image": "", + "level": "1200", + "defence": "85", + "slayer-level": "1", + "experience": 6250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2062.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "2700", + "name": "Default", + "slayer-exp": 27400, + "lifepoints": "250000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Celestial dragon", + "variants": [{ + "image": "", + "level": "127", + "defence": "91", + "slayer-level": "1", + "experience": 1137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 375.29998779296875, + "max-melee": "1068", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 976.5999755859375, + "lifepoints": "22750", + "max-ranged": "0", + "max-magic": "1168", + "max-necromancy": "0" + }] + }, + { + "name": "Celestial dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 2400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 792, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 2400, + "lifepoints": "48000", + "max-ranged": "1653", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Elegorn the Celestial", + "variants": [{ + "image": "", + "level": "114", + "defence": "90", + "slayer-level": "1", + "experience": 8750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2887.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 8800, + "lifepoints": "175000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Giant", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 371.20001220703125, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 929.4000244140625, + "lifepoints": "22500", + "max-ranged": "450", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockatrice", + "variants": [{ + "image": "", + "level": "31", + "defence": "25", + "slayer-level": "25", + "experience": 202.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 66.80000305175781, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 23.399999618530273, + "lifepoints": "4050", + "max-ranged": "400", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockroach drone", + "variants": [{ + "image": "", + "level": "4", + "defence": "3", + "slayer-level": "1", + "experience": 60, + "susceptible": ["<\/a>"], + "lifepoint-exp": 19.799999237060547, + "max-melee": "60", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockroach soldier", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 525, + "susceptible": ["<\/a>"], + "lifepoint-exp": 173.1999969482422, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 14, + "lifepoints": "10500", + "max-ranged": "1000", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockroach worker", + "variants": [{ + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "1", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Warped cockroach", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8.199999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "500", + "max-ranged": "20", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted dust devil", + "variants": [{ + "image": "", + "level": "107", + "defence": "76", + "slayer-level": "97", + "experience": 600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 198, + "max-melee": "1123", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 679.7999877929688, + "lifepoints": "12000", + "max-ranged": "1123", + "max-magic": "1123", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted kalphite guardian", + "variants": [{ + "image": "", + "level": "110", + "defence": "78", + "slayer-level": "100", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 494, + "lifepoints": "15000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted kalphite marauder", + "variants": [{ + "image": "", + "level": "110", + "defence": "78", + "slayer-level": "100", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 494, + "lifepoints": "15000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted lizard", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "94", + "experience": 550, + "susceptible": ["<\/a>"], + "lifepoint-exp": 181.5, + "max-melee": "1094", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 533.4000244140625, + "lifepoints": "11000", + "max-ranged": "1094", + "max-magic": "1094", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted scarab", + "variants": [{ + "image": "", + "level": "101", + "defence": "72", + "slayer-level": "91", + "experience": 500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 165, + "max-melee": "700", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 389, + "lifepoints": "10000", + "max-ranged": "700", + "max-magic": "700", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted scorpion", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "88", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 353.20001220703125, + "lifepoints": "9000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted worker", + "variants": [{ + "image": "", + "level": "113", + "defence": "80", + "slayer-level": "103", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1180", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 653, + "lifepoints": "15000", + "max-ranged": "1180", + "max-magic": "1180", + "max-necromancy": "0" + }] + }, + { + "name": "Cow", + "variants": [ + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard (1)", + "slayer-exp": 3.299999952316284, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard (2)", + "slayer-exp": 3.299999952316284, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard (3)", + "slayer-exp": 3.299999952316284, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zanaris", + "slayer-exp": 6.400000095367432, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cow calf", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8.199999809265137, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 3.200000047683716, + "lifepoints": "500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Super Cow", + "variants": [{ + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 36.400001525878906, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead cow", + "variants": [{ + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Crawling hand", + "variants": [ + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6a", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6b", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6c", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6d", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6e", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10a", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10b", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10c", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10d", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10e", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeletal hand", + "variants": [{ + "image": "", + "level": "63", + "defence": "50", + "slayer-level": "5", + "experience": 420, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 138.60000610351562, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 60.599998474121094, + "lifepoints": "8400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Zombie hand", + "variants": [{ + "image": "", + "level": "69", + "defence": "54", + "slayer-level": "5", + "experience": 460, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 151.8000030517578, + "max-melee": "880", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 73.19999694824219, + "lifepoints": "9200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Edimmu", + "variants": [{ + "image": "", + "level": "122", + "defence": "85", + "slayer-level": "90", + "experience": 1600, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 528, + "max-melee": "350", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 880.2000122070312, + "lifepoints": "32000", + "max-ranged": "0", + "max-magic": "350", + "max-necromancy": "0" + }] + }, + { + "name": "Edimmu (elite)", + "variants": [{ + "image": "", + "level": "125", + "defence": "85", + "slayer-level": "90", + "experience": 4800, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1584, + "max-melee": "1050", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 2044.5999755859375, + "lifepoints": "96000", + "max-ranged": "0", + "max-magic": "1050", + "max-necromancy": "0" + }] + }, + { + "name": "Frost dragon", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 425, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 140.1999969482422, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 398.79998779296875, + "lifepoints": "8500", + "max-ranged": "500", + "max-magic": "500", + "max-necromancy": "0" + }] + }, + { + "name": "Kal'gerion demon", + "variants": [ + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Bloodchiller", + "slayer-exp": 1858.800048828125, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Riftsplitter", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Pummeller", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Thunderous", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Warmonger", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Rush of Blood", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + } + ] + }, + { + "name": "Seeker", + "variants": [{ + "image": "", + "level": "86", + "defence": "55", + "slayer-level": "71", + "experience": 1200, + "susceptible": ["<\/a>"], + "lifepoint-exp": 396, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "Default", + "slayer-exp": 440.3999938964844, + "lifepoints": "24000", + "max-ranged": "0", + "max-magic": "250", + "max-necromancy": "0" + }] + }, + { + "name": "Soulgazer", + "variants": [{ + "image": "", + "level": "128", + "defence": "85", + "slayer-level": "99", + "experience": 2000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 660, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1950.4000244140625, + "lifepoints": "40000", + "max-ranged": "0", + "max-magic": "738", + "max-necromancy": "0" + }] + }, + { + "name": "Bulbous crawler", + "variants": [{ + "image": "", + "level": "140", + "defence": "95", + "slayer-level": "106", + "experience": 1900, + "susceptible": ["<\/a>"], + "lifepoint-exp": 627, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 2360, + "lifepoints": "38000", + "max-ranged": "2123", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Moss golem", + "variants": [{ + "image": "", + "level": "140", + "defence": "95", + "slayer-level": "108", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "2123", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 2408.800048828125, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Vinecrawler", + "variants": [{ + "image": "", + "level": "140", + "defence": "95", + "slayer-level": "104", + "experience": 1600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 528, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 2086, + "lifepoints": "32000", + "max-ranged": "0", + "max-magic": "2123", + "max-necromancy": "?" + }] + }, + { + "name": "Automaton Generator", + "variants": [ + { + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "67", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Post-quest", + "slayer-exp": 624, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "510", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "N/A", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "During The World Wakes", + "slayer-exp": 0, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "600", + "max-necromancy": "0" + } + ] + }, + { + "name": "Automaton Guardian", + "variants": [ + { + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "67", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "810", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Post-quest", + "slayer-exp": 624, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "N/A", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "During The World Wakes", + "slayer-exp": 0, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Automaton Tracer", + "variants": [ + { + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "67", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Post-quest", + "slayer-exp": 624, + "lifepoints": "20000", + "max-ranged": "510", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "N/A", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "The World Wakes", + "slayer-exp": 0, + "lifepoints": "7500", + "max-ranged": "600", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crocodile", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "116", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "77", + "slayer-exp": 44.400001525878906, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "29", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "116", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "40", + "slayer-exp": 33.400001525878906, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crocodile akh", + "variants": [{ + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "111", + "experience": 900, + "susceptible": ["<\/a>"], + "lifepoint-exp": 297, + "max-melee": "1561", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 761.2000122070312, + "lifepoints": "18000", + "max-ranged": "1561", + "max-magic": "1561", + "max-necromancy": "0" + }] + }, + { + "name": "Ol' Sawtooth", + "variants": [{ + "image": "", + "level": "120", + "defence": "70", + "slayer-level": "1", + "experience": 6750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2227.5, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "135000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea crocodile", + "variants": [ + { + "image": "", + "level": "77", + "defence": "75", + "slayer-level": "1", + "experience": 634.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 209.3000030517578, + "max-melee": "936", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "15500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "?", + "slayer-level": "1", + "experience": 387.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 127.80000305175781, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "7750", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crystal Shapeshifter", + "variants": [ + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "80", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "1900", + "name": "Melee", + "slayer-exp": 1269.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "80", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1900", + "name": "Ranged", + "slayer-exp": 1269.800048828125, + "lifepoints": "30000", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "80", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1900", + "name": "Magic", + "slayer-exp": 1269.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "980", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cyclops", + "variants": [ + { + "image": "", + "level": "57", + "defence": "41", + "slayer-level": "1", + "experience": 205, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67.5999984741211, + "max-melee": "205", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "57 (Stab)", + "slayer-exp": 71.80000305175781, + "lifepoints": "4100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 245, + "susceptible": ["<\/a>"], + "lifepoint-exp": 80.80000305175781, + "max-melee": "245", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "68 (Stab)", + "slayer-exp": 86.5999984741211, + "lifepoints": "4900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "57", + "defence": "41", + "slayer-level": "1", + "experience": 205, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67.5999984741211, + "max-melee": "205", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "57 (Slash)", + "slayer-exp": 71.80000305175781, + "lifepoints": "4100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 245, + "susceptible": ["<\/a>"], + "lifepoint-exp": 80.80000305175781, + "max-melee": "245", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "68 (Slash)", + "slayer-exp": 86.5999984741211, + "lifepoints": "4900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "57", + "defence": "41", + "slayer-level": "1", + "experience": 205, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67.5999984741211, + "max-melee": "205", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "57 (Crush)", + "slayer-exp": 71.80000305175781, + "lifepoints": "4100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 245, + "susceptible": ["<\/a>"], + "lifepoint-exp": 80.80000305175781, + "max-melee": "245", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "68 (Crush)", + "slayer-exp": 86.5999984741211, + "lifepoints": "4900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 487.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 160.8000030517578, + "max-melee": "325", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "91 (God Wars Dungeon), 1", + "slayer-exp": 281.79998779296875, + "lifepoints": "9750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 487.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 160.8000030517578, + "max-melee": "325", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "91 (God Wars Dungeon), 2", + "slayer-exp": 281.79998779296875, + "lifepoints": "9750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cyclossus", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 630, + "susceptible": ["<\/a>"], + "lifepoint-exp": 207.89999389648438, + "max-melee": "960", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 350, + "lifepoints": "12600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth (Lighthouse)", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "165", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 77", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 78", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dagannoth (Waterbirth Island)", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (78)", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "79", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (79)", + "slayer-exp": 61, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Blood Runs Deep (78)", + "slayer-exp": -1, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dagannoth (Waterbirth Island, ranged)", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged (78)", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "224", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "79", + "defence": "57", + "slayer-level": "1", + "experience": 142.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged (79)", + "slayer-exp": 64, + "lifepoints": "2850", + "max-ranged": "171", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dagannoth Prime", + "variants": [{ + "image": "", + "level": "303", + "defence": "68", + "slayer-level": "1", + "experience": 875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 288.70001220703125, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1068, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "1788", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth Rex", + "variants": [{ + "image": "", + "level": "303", + "defence": "68", + "slayer-level": "1", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "1788", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1068, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth Supreme", + "variants": [{ + "image": "", + "level": "303", + "defence": "68", + "slayer-level": "1", + "experience": 875, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 288.70001220703125, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1068, + "lifepoints": "35000", + "max-ranged": "1788", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth fledgeling", + "variants": [{ + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth guardian", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 165, + "max-melee": "400", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 326.6000061035156, + "lifepoints": "10000", + "max-ranged": "400", + "max-magic": "400", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth spawn", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 117.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 38.70000076293945, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 39.400001525878906, + "lifepoints": "2350", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dark beast", + "variants": [ + { + "image": "", + "level": "101", + "defence": "75", + "slayer-level": "90", + "experience": 425, + "susceptible": ["<\/a>"], + "lifepoint-exp": 140.1999969482422, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "8,500 life points", + "slayer-exp": 331.3999938964844, + "lifepoints": "8500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "101", + "defence": "75", + "slayer-level": "90", + "experience": 950, + "susceptible": ["<\/a>"], + "lifepoint-exp": 313.5, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "19,000 life points", + "slayer-exp": 440, + "lifepoints": "19000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dark beast (elite)", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "90", + "experience": 1700, + "susceptible": ["<\/a>"], + "lifepoint-exp": 561, + "max-melee": "1800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1372.800048828125, + "lifepoints": "34000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant dark beast", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 442.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 146, + "max-melee": "1327", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 415.6000061035156, + "lifepoints": "8850", + "max-ranged": "1327", + "max-magic": "1327", + "max-necromancy": "0" + }] + }, + { + "name": "Cerberus Juvenile", + "variants": [{ + "image": "", + "level": "138", + "defence": "85", + "slayer-level": "1", + "experience": 6000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1980, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10000, + "lifepoints": "120000", + "max-ranged": "2011", + "max-magic": "2011", + "max-necromancy": "0" + }] + }, + { + "name": "Gargoyle", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "75", + "experience": 335, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 110.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Regular", + "slayer-exp": 197.39999389648438, + "lifepoints": "6700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "75", + "experience": 675, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 222.6999969482422, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 197.39999389648438, + "lifepoints": "13500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon", + "variants": [ + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "1", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "2", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "3", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "4", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "5", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon ash lord", + "variants": [ + { + "image": "", + "level": "157", + "defence": "110", + "slayer-level": "1", + "experience": 7000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2310, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The Zamorakian Undercity", + "slayer-exp": 7150, + "lifepoints": "140000", + "max-ranged": "1564", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "149", + "defence": "100", + "slayer-level": "1", + "experience": 5500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1815, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 7150, + "lifepoints": "110000", + "max-ranged": "1564", + "max-magic": "2570", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon berserker", + "variants": [ + { + "image": "", + "level": "166", + "defence": "110", + "slayer-level": "1", + "experience": 7000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2310, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The Zamorakian Undercity", + "slayer-exp": 7150, + "lifepoints": "140000", + "max-ranged": "1564", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "159", + "defence": "104", + "slayer-level": "1", + "experience": 5500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1815, + "max-melee": "2793", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 7150, + "lifepoints": "110000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon brute", + "variants": [{ + "image": "", + "level": "148", + "defence": "107", + "slayer-level": "1", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "2346", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + }] + }, + { + "name": "Greater demon pyromancer", + "variants": [ + { + "image": "", + "level": "132", + "defence": "98", + "slayer-level": "1", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The Zamorakian Undercity", + "slayer-exp": -1, + "lifepoints": "70000", + "max-ranged": "1564", + "max-magic": "2011", + "max-necromancy": "0" + }, + { + "image": "", + "level": "132", + "defence": "85", + "slayer-level": "1", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": -1, + "lifepoints": "50000", + "max-ranged": "1564", + "max-magic": "2011", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon sage", + "variants": [{ + "image": "", + "level": "146", + "defence": "104", + "slayer-level": "1", + "experience": 4500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1485, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1564", + "max-magic": "2346", + "max-necromancy": "0" + }] + }, + { + "name": "Greater demon savage", + "variants": [{ + "image": "", + "level": "133", + "defence": "100", + "slayer-level": "1", + "experience": 4000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1320, + "max-melee": "2011", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "80000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + }] + }, + { + "name": "Imp", + "variants": [ + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 10, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3.299999952316284, + "max-melee": "16", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal", + "slayer-exp": 6.599999904632568, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 10, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3.299999952316284, + "max-melee": "16", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon", + "slayer-exp": 6.599999904632568, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Imp scavenger", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1650, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 544.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "33000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "K'ril Tsutsaroth", + "variants": [ + { + "image": "", + "level": "650", + "defence": "70", + "slayer-level": "1", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "Hard mode", + "slayer-exp": 3912.39990234375, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "840", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "75", + "slayer-level": "1", + "experience": 2750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 907.5, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "6600", + "name": "Normal", + "slayer-exp": 2151.800048828125, + "lifepoints": "55000", + "max-ranged": "0", + "max-magic": "1500", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 2250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 742.5, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "The World Wakes", + "slayer-exp": 1804, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "840", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kal'gerion demon (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bloodchiller", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Pummeller", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Riftsplitter", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Warmonger", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lesser demon", + "variants": [ + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + } + ] + }, + { + "name": "Revenant demon", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "1125", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 175, + "lifepoints": "7500", + "max-ranged": "1125", + "max-magic": "1125", + "max-necromancy": "0" + }] + }, + { + "name": "Ripper Demon", + "variants": [{ + "image": "", + "level": "131", + "defence": "90", + "slayer-level": "96", + "experience": 1678.0999755859375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 553.7000122070312, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Default", + "slayer-exp": 2721.60009765625, + "lifepoints": "33563", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Tormented demon", + "variants": [ + { + "image": "", + "level": "119", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Standard", + "slayer-exp": 1136, + "lifepoints": "20000", + "max-ranged": "1150", + "max-magic": "1150", + "max-necromancy": "0" + }, + { + "image": "", + "level": "119", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "While Guthix Sleeps", + "slayer-exp": 1136, + "lifepoints": "20000", + "max-ranged": "1150", + "max-magic": "1150", + "max-necromancy": "0" + } + ] + }, + { + "name": "Tstanon Karlak", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "365", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 272.79998779296875, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Yor'Ger the Deceiver", + "variants": [ + { + "image": "", + "level": "200", + "defence": "72", + "slayer-level": "0", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "1425", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 11368, + "lifepoints": "180000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "?" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zakl'n Gritch", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 150, + "lifepoints": "7500", + "max-ranged": "365", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Desert Lizard", + "variants": [ + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "22", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Green", + "slayer-exp": 21.600000381469727, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "22", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Yellow", + "slayer-exp": 21.600000381469727, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "22", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 21.600000381469727, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lizard", + "variants": [{ + "image": "", + "level": "40", + "defence": "29", + "slayer-level": "22", + "experience": 232.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 76.69999694824219, + "max-melee": "580", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 54.79999923706055, + "lifepoints": "4650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Small Lizard", + "variants": [ + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "22", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Green", + "slayer-exp": 9.600000381469727, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "22", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Yellow", + "slayer-exp": 9.600000381469727, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Desert strykewyrm", + "variants": [{ + "image": "", + "level": "103", + "defence": "74", + "slayer-level": "77", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "710", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "Default", + "slayer-exp": 376.6000061035156, + "lifepoints": "10000", + "max-ranged": "710", + "max-magic": "710", + "max-necromancy": "0" + }] + }, + { + "name": "Baby Dinosaur Skeleton", + "variants": [] + }, + { + "name": "Brutish dinosaur", + "variants": [ + { + "image": "", + "level": "164", + "defence": "80", + "slayer-level": "99", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "2757", + "name": "Normal", + "slayer-exp": 3100, + "lifepoints": "70000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "164", + "defence": "80", + "slayer-level": "99", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "2757", + "name": "Dinosaur invasion", + "slayer-exp": 3100, + "lifepoints": "70000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Feral Dinosaur", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "90", + "experience": 2250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 742.5, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 1810, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "N/A", + "experience": 2250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 742.5, + "max-melee": "1224", + "weakness": [], + "max-spec": "N/A", + "name": "Dinosaur invasion", + "slayer-exp": -2, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Orikalka", + "variants": [{ + "image": "", + "level": "888", + "defence": "96", + "slayer-level": "1", + "experience": 4750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1567.5, + "max-melee": "3129", + "weakness": ["<\/a>"], + "max-spec": "4500", + "name": "Default", + "slayer-exp": 4500, + "lifepoints": "190000", + "max-ranged": "0", + "max-magic": "4500", + "max-necromancy": "0" + }] + }, + { + "name": "Osseous", + "variants": [{ + "image": "", + "level": "888", + "defence": "90", + "slayer-level": "1", + "experience": 17500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 5775, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "5100", + "name": "Default", + "slayer-exp": 394, + "lifepoints": "350000", + "max-ranged": "?", + "max-magic": "0", + "max-necromancy": "3129" + }] + }, + { + "name": "Pthentraken", + "variants": [{ + "image": "", + "level": "888", + "defence": "96", + "slayer-level": "1", + "experience": 4750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1567.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "5500", + "name": "Default", + "slayer-exp": 4545, + "lifepoints": "190000", + "max-ranged": "3500", + "max-magic": "3129", + "max-necromancy": "0" + }] + }, + { + "name": "Rathis", + "variants": [{ + "image": "", + "level": "888", + "defence": "96", + "slayer-level": "1", + "experience": 4750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1567.5, + "max-melee": "3129", + "weakness": ["<\/a>"], + "max-spec": "4500", + "name": "Default", + "slayer-exp": 4545, + "lifepoints": "190000", + "max-ranged": "3500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ripper dinosaur", + "variants": [ + { + "image": "", + "level": "176", + "defence": "80", + "slayer-level": "114", + "experience": 3250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1072.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 1904, + "lifepoints": "65000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "176", + "defence": "80", + "slayer-level": "N/A", + "experience": 3250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1072.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Dinosaur invasion", + "slayer-exp": -2, + "lifepoints": "65000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Venomous dinosaur", + "variants": [ + { + "image": "", + "level": "172", + "defence": "80", + "slayer-level": "105", + "experience": 1750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 577.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 1332, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "172", + "defence": "80", + "slayer-level": "N/A", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Dinosaur invasion", + "slayer-exp": -2, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Guard dog", + "variants": [{ + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 60, + "susceptible": ["<\/a>"], + "lifepoint-exp": 19.799999237060547, + "max-melee": "96", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 13.399999618530273, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jackal", + "variants": [{ + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 175, + "susceptible": ["<\/a>"], + "lifepoint-exp": 57.70000076293945, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 43.20000076293945, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Shadow Hound", + "variants": [{ + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": ["<\/a>"], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 39.400001525878906, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Wild dog", + "variants": [{ + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": [], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Baby red dragon", + "variants": [{ + "image": "", + "level": "47", + "defence": "34", + "slayer-level": "1", + "experience": 85, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28, + "max-melee": "136", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 20.600000381469727, + "lifepoints": "1700", + "max-ranged": "0", + "max-magic": "136", + "max-necromancy": "0" + }] + }, + { + "name": "Black stone dragon", + "variants": [{ + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 16250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 5362.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 37600, + "lifepoints": "650000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Brutal green dragon", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "1250", + "max-necromancy": "0" + }] + }, + { + "name": "Dragonstone dragon", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "95", + "experience": 2000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 660, + "max-melee": "1561", + "weakness": ["<\/a>"], + "max-spec": "1561", + "name": "Default", + "slayer-exp": 1448.4000244140625, + "lifepoints": "40000", + "max-ranged": "0", + "max-magic": "1561", + "max-necromancy": "0" + }] + }, + { + "name": "Dragonstone dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "111", + "defence": "75", + "slayer-level": "1", + "experience": 2750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 907.5, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 5100, + "lifepoints": "55000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "0" + }] + }, + { + "name": "Green dragon", + "variants": [ + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "1", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "2", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "3", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "4", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "5", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hydrix dragon", + "variants": [{ + "image": "", + "level": "133", + "defence": "95", + "slayer-level": "101", + "experience": 3000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 990, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "3900", + "name": "Default", + "slayer-exp": 4768.7998046875, + "lifepoints": "60000", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }] + }, + { + "name": "Hydrix dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "118", + "defence": "75", + "slayer-level": "1", + "experience": 3750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1237.5, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "3900", + "name": "Default", + "slayer-exp": 17000, + "lifepoints": "75000", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + }] + }, + { + "name": "Iron dragon", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "488", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 245, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "488", + "max-necromancy": "0" + }] + }, + { + "name": "Mithril dragon", + "variants": [{ + "image": "", + "level": "112", + "defence": "85", + "slayer-level": "1", + "experience": 890, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 293.70001220703125, + "max-melee": "1068", + "weakness": ["<\/a>"], + "max-spec": "2700", + "name": "Default", + "slayer-exp": 564.4000244140625, + "lifepoints": "17800", + "max-ranged": "1068", + "max-magic": "1068", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon artificer", + "variants": [{ + "image": "", + "level": "120", + "defence": "94", + "slayer-level": "92", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1598", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon engineer", + "variants": [{ + "image": "", + "level": "150", + "defence": "95", + "slayer-level": "92", + "experience": 6250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2062.5, + "max-melee": "1506", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 2769, + "lifepoints": "50000", + "max-ranged": "1506", + "max-magic": "1506", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon guard", + "variants": [{ + "image": "", + "level": "120", + "defence": "94", + "slayer-level": "92", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "1598", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon hunter", + "variants": [{ + "image": "", + "level": "120", + "defence": "94", + "slayer-level": "92", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "30000", + "max-ranged": "1598", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Onyx dragon", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "98", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1653.8", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Onyx dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 3000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 990, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 6050, + "lifepoints": "60000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Red dragon", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + } + ] + }, + { + "name": "Red dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 1450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 478.5, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1227, + "lifepoints": "29000", + "max-ranged": "1080", + "max-magic": "1080", + "max-necromancy": "0" + }] + }, + { + "name": "Rune dragon", + "variants": [ + { + "image": "", + "level": "127", + "defence": "90", + "slayer-level": "76", + "experience": 3412.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1126.0999755859375, + "max-melee": "1820", + "weakness": ["<\/a>"], + "max-spec": "10000", + "name": "Armoured", + "slayer-exp": 2051, + "lifepoints": "68250", + "max-ranged": "1820", + "max-magic": "1820", + "max-necromancy": "0" + }, + { + "image": "", + "level": "127", + "defence": "90", + "slayer-level": "76", + "experience": 3412.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1126.0999755859375, + "max-melee": "1820", + "weakness": ["<\/a>"], + "max-spec": "10000", + "name": "Unarmoured", + "slayer-exp": 2051, + "lifepoints": "68250", + "max-ranged": "1820", + "max-magic": "1820", + "max-necromancy": "0" + } + ] + }, + { + "name": "Sangri the Red", + "variants": [{ + "image": "", + "level": "131", + "defence": "94", + "slayer-level": "1", + "experience": 8750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2887.5, + "max-melee": "1353", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 14077, + "lifepoints": "175000", + "max-ranged": "1353", + "max-magic": "1353", + "max-necromancy": "0" + }] + }, + { + "name": "Siege engine", + "variants": [{ + "image": "", + "level": "150", + "defence": "90", + "slayer-level": "92", + "experience": 2400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 792, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1505, + "lifepoints": "30000", + "max-ranged": "1653", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Steel dragon", + "variants": [{ + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 165, + "max-melee": "508", + "weakness": ["<\/a>"], + "max-spec": "2100", + "name": "Default", + "slayer-exp": 350, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "508", + "max-necromancy": "0" + }] + }, + { + "name": "Dust devil", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "65", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 192.8000030517578, + "lifepoints": "8000", + "max-ranged": "244", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dust devil (elite)", + "variants": [{ + "image": "", + "level": "95", + "defence": "61", + "slayer-level": "65", + "experience": 1600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 528, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 684, + "lifepoints": "32000", + "max-ranged": "732", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Earth warrior", + "variants": [{ + "image": "", + "level": "61", + "defence": "56", + "slayer-level": "1", + "experience": 482.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 159.1999969482422, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 57.5, + "lifepoints": "9650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Earth warrior (elite)", + "variants": [{ + "image": "", + "level": "75", + "defence": "56", + "slayer-level": "1", + "experience": 1630, + "susceptible": ["<\/a>"], + "lifepoint-exp": 537.9000244140625, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 295, + "lifepoints": "32600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cadarn magus", + "variants": [{ + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "1791", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "1083", + "max-necromancy": "0" + }] + }, + { + "name": "Cadarn ranger", + "variants": [{ + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "1300", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "1083", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Elf warrior", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": ["<\/a>"], + "lifepoint-exp": 49.5, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee", + "slayer-exp": 73.5999984741211, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 160, + "susceptible": ["<\/a>"], + "lifepoint-exp": 52.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Range", + "slayer-exp": 89.4000015258789, + "lifepoints": "3200", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Iorwerth guard", + "variants": [{ + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "1899", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Iorwerth scout", + "variants": [{ + "image": "", + "level": "122", + "defence": "75", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Knight of Ardougne (West Ardougne)", + "variants": [ + { + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 80, + "susceptible": ["<\/a>"], + "lifepoint-exp": 26.399999618530273, + "max-melee": "96", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Surface", + "slayer-exp": 0, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 203.3000030517578, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Mourner Tunnels", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mourner (Mourner Tunnels)", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Seren archer", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Seren mage", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "980", + "max-necromancy": "0" + }] + }, + { + "name": "Seren warrior", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fetid zombie", + "variants": [ + { + "image": "", + "level": "66", + "defence": "45", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 100, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "66", + "defence": "45", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 100, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Fever spider", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "42", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "740", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 86.5999984741211, + "lifepoints": "4200", + "max-ranged": "840", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fire giant", + "variants": [{ + "image": "", + "level": "85", + "defence": "62", + "slayer-level": "1", + "experience": 335, + "susceptible": ["<\/a>"], + "lifepoint-exp": 110.5, + "max-melee": "335", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 161.1999969482422, + "lifepoints": "6700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Flesh Crawler", + "variants": [{ + "image": "", + "level": "26", + "defence": "22", + "slayer-level": "1", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 50, + "lifepoints": "3600", + "max-ranged": "320", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Big frog", + "variants": [{ + "image": "", + "level": "18", + "defence": "20", + "slayer-level": "1", + "experience": 165, + "susceptible": ["<\/a>"], + "lifepoint-exp": 54.400001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 14.399999618530273, + "lifepoints": "3300", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Frog", + "variants": [{ + "image": "", + "level": "67", + "defence": "55", + "slayer-level": "1", + "experience": 235, + "susceptible": ["<\/a>"], + "lifepoint-exp": 77.5, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 54.79999923706055, + "lifepoints": "4700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Frogeel", + "variants": [{ + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.400001525878906, + "lifepoints": "8200", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant frog", + "variants": [{ + "image": "", + "level": "33", + "defence": "32", + "slayer-level": "1", + "experience": 255, + "susceptible": ["<\/a>"], + "lifepoint-exp": 84.0999984741211, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 18.799999237060547, + "lifepoints": "5100", + "max-ranged": "300", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Plague frog", + "variants": [{ + "image": "", + "level": "17", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.200000762939453, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Swamp frog", + "variants": [{ + "image": "", + "level": "11", + "defence": "12", + "slayer-level": "1", + "experience": 55, + "susceptible": ["<\/a>"], + "lifepoint-exp": 18.100000381469727, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10, + "lifepoints": "1100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fungal mage", + "variants": [ + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 63.599998474121094, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "232", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Weakened", + "slayer-exp": 63.599998474121094, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "116", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ganodermic beast", + "variants": [ + { + "image": "", + "level": "112", + "defence": "70", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 565, + "lifepoints": "12500", + "max-ranged": "0", + "max-magic": "332", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "60", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 565, + "lifepoints": "12500", + "max-ranged": "0", + "max-magic": "166", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ganodermic runt", + "variants": [ + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 564.4000244140625, + "lifepoints": "12500", + "max-ranged": "332", + "max-magic": "332", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 564.4000244140625, + "lifepoints": "12500", + "max-ranged": "166", + "max-magic": "166", + "max-necromancy": "0" + } + ] + }, + { + "name": "Gelatinous abomination", + "variants": [{ + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8.199999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19, + "lifepoints": "500", + "max-ranged": "0", + "max-magic": "60", + "max-necromancy": "0" + }] + }, + { + "name": "Ahrim the Blighted", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "1260", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "864", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ritual of the Mahjarrat", + "slayer-exp": 395, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "864", + "max-necromancy": "0" + } + ] + }, + { + "name": "Akrisae the Doomed", + "variants": [ + { + "image": "", + "level": "115", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Barrows", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "2167", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Gregorovic", + "slayer-exp": -1, + "lifepoints": "1000000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "70", + "slayer-level": "?", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sliske's Endgame", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dharok the Wretched", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "3150", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3150", + "name": "Ritual of the Mahjarrat", + "slayer-exp": 395, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3150", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghast", + "variants": [ + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "150", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Regular", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "28", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Easy Route)", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Medium Route)", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Hard Route)", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghost", + "variants": [ + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "7", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghost (Abandoned Mine)", + "variants": [{ + "image": "", + "level": "42", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ghost (Ourania Runecrafting Altar)", + "variants": [] + }, + { + "name": "Ghost (Shattered Worlds)", + "variants": [] + }, + { + "name": "Ghost (Spirit of Summer)", + "variants": [] + }, + { + "name": "Ghost (Stronghold of Security)", + "variants": [ + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghost healer", + "variants": [] + }, + { + "name": "Ghostly troll bruiser", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 20.799999237060547, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ghostly troll thrower", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 20.799999237060547, + "lifepoints": "1800", + "max-ranged": "100", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ghostly warrior", + "variants": [{ + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "1", + "experience": 110, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 36.29999923706055, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 32.599998474121094, + "lifepoints": "2200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Guthan the Infested", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 881.4000244140625, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 290.79998779296875, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ritual of the Mahjarrat", + "slayer-exp": -1, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 7149.60009765625, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2359.300048828125, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Karil the Tainted", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "1260", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "864", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Linza the Disgraced", + "variants": [ + { + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "1", + "experience": 3750, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1237.5, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Barrows", + "slayer-exp": 440, + "lifepoints": "150000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sliske's Endgame", + "slayer-exp": -1, + "lifepoints": "150000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Masuta the Descended", + "variants": [{ + "image": "", + "level": "1000", + "defence": "85", + "slayer-level": "?", + "experience": 9750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3217.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "195000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant cyclops", + "variants": [{ + "image": "", + "level": "60", + "defence": "43", + "slayer-level": "1", + "experience": 322.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 106.4000015258789, + "max-melee": "967", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 93.19999694824219, + "lifepoints": "6450", + "max-ranged": "967", + "max-magic": "967", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant dragon", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 517.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 170.6999969482422, + "max-melee": "1552", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 712.4000244140625, + "lifepoints": "10350", + "max-ranged": "1552", + "max-magic": "1552", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant goblin", + "variants": [ + { + "image": "", + "level": "16", + "defence": "12", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "270", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "16", + "slayer-exp": 27.799999237060547, + "lifepoints": "1800", + "max-ranged": "270", + "max-magic": "270", + "max-necromancy": "0" + }, + { + "image": "", + "level": "19", + "defence": "20", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "19", + "slayer-exp": 28.399999618530273, + "lifepoints": "3000", + "max-ranged": "450", + "max-magic": "450", + "max-necromancy": "0" + }, + { + "image": "", + "level": "22", + "defence": "20", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "22", + "slayer-exp": 29.600000381469727, + "lifepoints": "3000", + "max-ranged": "450", + "max-magic": "450", + "max-necromancy": "0" + }, + { + "image": "", + "level": "28", + "defence": "20", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "28", + "slayer-exp": 34.599998474121094, + "lifepoints": "3000", + "max-ranged": "450", + "max-magic": "450", + "max-necromancy": "0" + } + ] + }, + { + "name": "Revenant hellhound", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 352.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 116.30000305175781, + "max-melee": "1057", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 122.19999694824219, + "lifepoints": "7050", + "max-ranged": "1057", + "max-magic": "1057", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant hobgoblin", + "variants": [{ + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 240, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 79.19999694824219, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 56.599998474121094, + "lifepoints": "4800", + "max-ranged": "720", + "max-magic": "720", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant icefiend", + "variants": [{ + "image": "", + "level": "37", + "defence": "27", + "slayer-level": "1", + "experience": 202.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 66.80000305175781, + "max-melee": "607", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 45.599998474121094, + "lifepoints": "4050", + "max-ranged": "607", + "max-magic": "607", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant imp", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 75, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 24.700000762939453, + "max-melee": "225", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 25, + "lifepoints": "1500", + "max-ranged": "225", + "max-magic": "225", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant knight", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 160.8000030517578, + "max-melee": "1462", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 552.7999877929688, + "lifepoints": "9750", + "max-ranged": "1462", + "max-magic": "1462", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant ork", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 412.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 136.10000610351562, + "max-melee": "1237", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 269.20001220703125, + "lifepoints": "8250", + "max-ranged": "1237", + "max-magic": "1237", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant pyrefiend", + "variants": [{ + "image": "", + "level": "40", + "defence": "29", + "slayer-level": "1", + "experience": 217.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 71.69999694824219, + "max-melee": "652", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 50.20000076293945, + "lifepoints": "4350", + "max-ranged": "652", + "max-magic": "652", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant vampyre", + "variants": [{ + "image": "", + "level": "47", + "defence": "34", + "slayer-level": "1", + "experience": 255, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 84.0999984741211, + "max-melee": "765", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 62.20000076293945, + "lifepoints": "5100", + "max-ranged": "765", + "max-magic": "765", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant werewolf", + "variants": [{ + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 285, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 94, + "max-melee": "855", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 74.4000015258789, + "lifepoints": "5700", + "max-ranged": "855", + "max-magic": "855", + "max-necromancy": "0" + }] + }, + { + "name": "Risen ghost", + "variants": [{ + "image": "", + "level": "101", + "defence": "70", + "slayer-level": "85", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1000, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1117", + "max-necromancy": "0" + }] + }, + { + "name": "Shade", + "variants": [{ + "image": "", + "level": "52", + "defence": "44", + "slayer-level": "1", + "experience": 362.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 119.5999984741211, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "7250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Shadow warrior", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 390, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 128.6999969482422, + "max-melee": "940", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 113, + "lifepoints": "7800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Torag the Corrupted", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Tormented soul (Uncharted Isles)", + "variants": [{ + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 98.5999984741211, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + }] + }, + { + "name": "Tormented wraith", + "variants": [{ + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "270", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 52, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "120", + "max-necromancy": "0" + }] + }, + { + "name": "Tortured soul (Port Phasmatys)", + "variants": [{ + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "114", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 38.79999923706055, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "152", + "max-necromancy": "0" + }] + }, + { + "name": "Verac the Defiled", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Wight", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Wight (Missing, Presumed Death)", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 17.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 5.699999809265137, + "max-melee": "25", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "350", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Wight ranger", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Wight ranger (Sliske's Endgame)", + "variants": [ + { + "image": "", + "level": "78", + "defence": "?", + "slayer-level": "1", + "experience": 206.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 68, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78", + "slayer-exp": -1, + "lifepoints": "4125", + "max-ranged": "192", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "?", + "slayer-level": "1", + "experience": 206.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 68, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78 (Weak in slash)", + "slayer-exp": -1, + "lifepoints": "4125", + "max-ranged": "1676.3", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "85", + "defence": "?", + "slayer-level": "1", + "experience": 206.25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 68, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "85", + "slayer-exp": -1, + "lifepoints": "4125", + "max-ranged": "384", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Ghoul", + "variants": [ + { + "image": "", + "level": "50", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 35.79999923706055, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "50", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Blue", + "slayer-exp": 35.79999923706055, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghoul (Paterdomus)", + "variants": [{ + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 60, + "susceptible": ["<\/a>"], + "lifepoint-exp": 19.799999237060547, + "max-melee": "96", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ravenous ghoul", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 725, + "susceptible": ["<\/a>"], + "lifepoint-exp": 239.1999969482422, + "max-melee": "595", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "14500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ravenous ghoul (Mazchna)", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 475, + "susceptible": ["<\/a>"], + "lifepoint-exp": 156.6999969482422, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "9500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Arch-Glacor", + "variants": [ + { + "image": "", + "level": "7000", + "defence": "75", + "slayer-level": "1", + "experience": 1625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 536.2000122070312, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Hard mode", + "slayer-exp": 4810, + "lifepoints": "65000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7000", + "defence": "75", + "slayer-level": "1", + "experience": 1625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 536.2000122070312, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Normal mode", + "slayer-exp": 4810, + "lifepoints": "65000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bolstered Glacyte", + "variants": [{ + "image": "", + "level": "131", + "defence": "90", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "950", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1250", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "?" + }] + }, + { + "name": "Enduring glacyte", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 333.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 109.9000015258789, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Glacor", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 2000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 660, + "max-melee": "1266", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 1881, + "lifepoints": "40000", + "max-ranged": "1266", + "max-magic": "1266", + "max-necromancy": "0" + }] + }, + { + "name": "Glacyte", + "variants": [ + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "84", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee", + "slayer-exp": 182, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "84", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic", + "slayer-exp": 182, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Glacyte (Arch-Glacor)", + "variants": [ + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "0", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee", + "slayer-exp": -1, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "0", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic", + "slayer-exp": -1, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Sapping glacyte", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 333.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 109.9000015258789, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Unstable glacyte", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 333.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 109.9000015258789, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Angry goblin", + "variants": [ + { + "image": "", + "level": "45", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A Soul's Bane", + "slayer-exp": 0, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Brokeface", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": ["<\/a>"], + "lifepoint-exp": 29.700000762939453, + "max-melee": "150", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cave goblin (monster)", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cave goblin guard", + "variants": [ + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.300000190734863, + "max-melee": "60", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Club", + "slayer-exp": 9.600000381469727, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.300000190734863, + "max-melee": "60", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Spear", + "slayer-exp": 9.600000381469727, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cave goblin miner", + "variants": [ + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 12.5, + "susceptible": [], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Mining", + "slayer-exp": 6.800000190734863, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 12.5, + "susceptible": [], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Slacking off", + "slayer-exp": 6.800000190734863, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin", + "variants": [ + { + "image": "", + "level": "2", + "defence": "2", + "slayer-level": "1", + "experience": 27.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 9, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 2", + "slayer-exp": -1, + "lifepoints": "550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 5", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 87.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 28.799999237060547, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 11", + "slayer-exp": -1, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 1 (Slayer challenge)", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 10, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3.299999952316284, + "max-melee": "16", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 5 (Slayer challenge)", + "slayer-exp": -1, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "32", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 11 (Slayer challenge)", + "slayer-exp": -1, + "lifepoints": "400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin (Goblin Village)", + "variants": [ + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (1)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (2)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (3)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (4)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (5)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (6)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (1)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (2)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (3)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (4)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (5)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (6)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin (God Wars Dungeon)", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Sword", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Warhammer", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Banner", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Spear", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Battleaxe", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin (Stronghold of Security)", + "variants": [ + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (a)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (b)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (c)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (d)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (e)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (f)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Guard (cave goblin)", + "variants": [ + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Club", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Spear", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lumpnose", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": ["<\/a>"], + "lifepoint-exp": 29.700000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1800", + "max-ranged": "150", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sergeant Grimspike", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 273.70001220703125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.30000305175781, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 199.1999969482422, + "lifepoints": "5475", + "max-ranged": "365", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sergeant Steelwill", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 273.70001220703125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.30000305175781, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 199.1999969482422, + "lifepoints": "5475", + "max-ranged": "0", + "max-magic": "365", + "max-necromancy": "0" + }] + }, + { + "name": "Sergeant Strongstack", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 273.70001220703125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.30000305175781, + "max-melee": "365", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 199.1999969482422, + "lifepoints": "5475", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skoblin", + "variants": [{ + "image": "", + "level": "19", + "defence": "14", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9.399999618530273, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Stinkears", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": ["<\/a>"], + "lifepoint-exp": 29.700000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "150", + "max-necromancy": "0" + }] + }, + { + "name": "Gorak", + "variants": [ + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": ["<\/a>"], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Gorak Plane", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 598.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 197.5, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon", + "slayer-exp": 207.39999389648438, + "lifepoints": "6800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 598.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 197.5, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": -1, + "lifepoints": "6800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Butcher demon", + "variants": [{ + "image": "", + "level": "118", + "defence": "80", + "slayer-level": "1", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 5680.2001953125, + "lifepoints": "100000", + "max-ranged": "1653", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Champion of Infernus", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1136, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "816", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Demon", + "variants": [{ + "image": "", + "level": "100", + "defence": "80", + "slayer-level": "1", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "2212", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "15000", + "max-ranged": "2212", + "max-magic": "2212", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Demon Savage", + "variants": [{ + "image": "", + "level": "141", + "defence": "110", + "slayer-level": "1", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "2011", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "70000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + }] + }, + { + "name": "Denizen of Infernus", + "variants": [{ + "image": "", + "level": "127", + "defence": "70", + "slayer-level": "1", + "experience": 6000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1980, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10000, + "lifepoints": "120000", + "max-ranged": "864", + "max-magic": "1656", + "max-necromancy": "0" + }] + }, + { + "name": "Greater demon (elite)", + "variants": [{ + "image": "", + "level": "92", + "defence": "59", + "slayer-level": "1", + "experience": 1200, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 396, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 619.7999877929688, + "lifepoints": "24000", + "max-ranged": "0", + "max-magic": "1065", + "max-necromancy": "0" + }] + }, + { + "name": "Kor'Vath the Blightbringer", + "variants": [ + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "140,000 life points", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "170,000 life points", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "400,000 life points", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + } + ] + }, + { + "name": "La'Kalor the Unbroken", + "variants": [{ + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }] + }, + { + "name": "Shara'Kor the Widowmaker", + "variants": [{ + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }] + }, + { + "name": "Grifolapine", + "variants": [ + { + "image": "", + "level": "103", + "defence": "74", + "slayer-level": "88", + "experience": 370, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.0999984741211, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 279, + "lifepoints": "7400", + "max-ranged": "296", + "max-magic": "296", + "max-necromancy": "0" + }, + { + "image": "", + "level": "103", + "defence": "74", + "slayer-level": "88", + "experience": 370, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.0999984741211, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 279, + "lifepoints": "7400", + "max-ranged": "148", + "max-magic": "148", + "max-necromancy": "0" + } + ] + }, + { + "name": "Grifolaroo", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "82", + "experience": 385, + "susceptible": ["<\/a>"], + "lifepoint-exp": 127, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 323.20001220703125, + "lifepoints": "7700", + "max-ranged": "308", + "max-magic": "308", + "max-necromancy": "0" + }, + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "82", + "experience": 385, + "susceptible": ["<\/a>"], + "lifepoint-exp": 127, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 323.20001220703125, + "lifepoints": "7700", + "max-ranged": "154", + "max-magic": "154", + "max-necromancy": "0" + } + ] + }, + { + "name": "Giant worm", + "variants": [{ + "image": "", + "level": "72", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 117.4000015258789, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "600", + "max-necromancy": "0" + }] + }, + { + "name": "Grotworm", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 372.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.9000015258789, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 102.80000305175781, + "lifepoints": "7450", + "max-ranged": "0", + "max-magic": "900", + "max-necromancy": "0" + }] + }, + { + "name": "Mature grotworm", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 640, + "susceptible": ["<\/a>"], + "lifepoint-exp": 211.1999969482422, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 343.6000061035156, + "lifepoints": "12800", + "max-ranged": "0", + "max-magic": "1400", + "max-necromancy": "0" + }] + }, + { + "name": "Young grotworm", + "variants": [{ + "image": "", + "level": "28", + "defence": "20", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 11.399999618530273, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "400", + "max-necromancy": "0" + }] + }, + { + "name": "Harpie Bug Swarm", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "33", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 34, + "lifepoints": "2250", + "max-ranged": "180", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Harpie Bug Swarm (elite)", + "variants": [{ + "image": "", + "level": "72", + "defence": "45", + "slayer-level": "33", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 313, + "lifepoints": "9000", + "max-ranged": "540", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound", + "variants": [ + { + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 165, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 54.400001525878906, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 93.80000305175781, + "lifepoints": "3300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "75", + "slayer-level": "1", + "experience": 475, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 156.6999969482422, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon", + "slayer-exp": 207.39999389648438, + "lifepoints": "9500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 475, + "susceptible": ["<\/a>"], + "lifepoint-exp": 156.6999969482422, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 105", + "slayer-exp": 371, + "lifepoints": "9500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hellhound (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound (The Zamorakian Undercity)", + "variants": [{ + "image": "", + "level": "104", + "defence": "66", + "slayer-level": "1", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 800, + "lifepoints": "9000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound (summoned)", + "variants": [{ + "image": "", + "level": "104", + "defence": "66", + "slayer-level": "1", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "9000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound Alpha", + "variants": [{ + "image": "", + "level": "113", + "defence": "66", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "1584", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "20000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound Hunter", + "variants": [{ + "image": "", + "level": "111", + "defence": "66", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound Hunter (summoned)", + "variants": [{ + "image": "", + "level": "111", + "defence": "66", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hill Giant", + "variants": [{ + "image": "", + "level": "26", + "defence": "22", + "slayer-level": "1", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 37.599998474121094, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Hobgoblin", + "variants": [ + { + "image": "", + "level": "15", + "defence": "10", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 15", + "slayer-exp": 35, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "12", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18", + "slayer-exp": 39, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 487.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 160.8000030517578, + "max-melee": "325", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 91 (GWD)", + "slayer-exp": 268.6000061035156, + "lifepoints": "9750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hobgoblin (elite)", + "variants": [{ + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 252.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 83.30000305175781, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "5050", + "max-ranged": "460", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice giant", + "variants": [ + { + "image": "", + "level": "47", + "defence": "37", + "slayer-level": "1", + "experience": 372.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.9000015258789, + "max-melee": "750", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 47 (1)", + "slayer-exp": 80.80000305175781, + "lifepoints": "7450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "47", + "defence": "37", + "slayer-level": "1", + "experience": 372.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.9000015258789, + "max-melee": "750", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 47 (2)", + "slayer-exp": 80.80000305175781, + "lifepoints": "7450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice strykewyrm", + "variants": [{ + "image": "", + "level": "106", + "defence": "76", + "slayer-level": "93", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "729", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "Default", + "slayer-exp": 693.2000122070312, + "lifepoints": "25000", + "max-ranged": "729", + "max-magic": "729", + "max-necromancy": "0" + }] + }, + { + "name": "Ice warrior", + "variants": [ + { + "image": "", + "level": "40", + "defence": "26", + "slayer-level": "1", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "640", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 25.799999237060547, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "26", + "slayer-level": "1", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "640", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ice Queen's Lair", + "slayer-exp": 25.799999237060547, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Icelord", + "variants": [ + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 75, + "susceptible": ["<\/a>"], + "lifepoint-exp": 24.700000762939453, + "max-melee": "90", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "ranged", + "slayer-exp": 60, + "lifepoints": "1500", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 75, + "susceptible": ["<\/a>"], + "lifepoint-exp": 24.700000762939453, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "melee", + "slayer-exp": 60, + "lifepoints": "1500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Icefiend", + "variants": [ + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ice Mountain", + "slayer-exp": 7, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "500", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ice Mountain (melting)", + "slayer-exp": 7, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "500", + "max-necromancy": "0" + } + ] + }, + { + "name": "Icefiend (Ghorrock)", + "variants": [{ + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 362.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 119.5999984741211, + "max-melee": "1540", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 335, + "lifepoints": "7250", + "max-ranged": "1540", + "max-magic": "1540", + "max-necromancy": "0" + }] + }, + { + "name": "Infernal Mage", + "variants": [{ + "image": "", + "level": "63", + "defence": "40", + "slayer-level": "45", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 91, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "1040", + "max-necromancy": "0" + }] + }, + { + "name": "Infernal Mage (elite)", + "variants": [{ + "image": "", + "level": "77", + "defence": "50", + "slayer-level": "45", + "experience": 1050, + "susceptible": ["<\/a>"], + "lifepoint-exp": 346.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 596, + "lifepoints": "21000", + "max-ranged": "0", + "max-magic": "1240", + "max-necromancy": "0" + }] + }, + { + "name": "Jelly", + "variants": [{ + "image": "", + "level": "61", + "defence": "49", + "slayer-level": "52", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 93, + "lifepoints": "8200", + "max-ranged": "760", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jungle horror", + "variants": [{ + "image": "", + "level": "48", + "defence": "30", + "slayer-level": "1", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.5, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Quetzathog", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "0", + "experience": 7275, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2400.699951171875, + "max-melee": "2376", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "145500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea horror", + "variants": [ + { + "image": "", + "level": "119", + "defence": "60", + "slayer-level": "1", + "experience": 4178.2001953125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1378.800048828125, + "max-melee": "482", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal mode", + "slayer-exp": 1388, + "lifepoints": "35500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "119", + "defence": "60", + "slayer-level": "1", + "experience": 887.5, + "susceptible": [], + "lifepoint-exp": 292.79998779296875, + "max-melee": "482", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Story mode", + "slayer-exp": 1388, + "lifepoints": "17750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Jungle strykewyrm", + "variants": [{ + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "73", + "experience": 425, + "susceptible": ["<\/a>"], + "lifepoint-exp": 140.1999969482422, + "max-melee": "643", + "weakness": ["<\/a>"], + "max-spec": "1800", + "name": "Default", + "slayer-exp": 249.8000030517578, + "lifepoints": "8500", + "max-ranged": "643", + "max-magic": "643", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled Kalphite Queen", + "variants": [ + { + "image": "", + "level": "356", + "defence": "75", + "slayer-level": "1", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "First form", + "slayer-exp": 2055, + "lifepoints": "50000", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "356", + "defence": "75", + "slayer-level": "1", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Second form", + "slayer-exp": 2055, + "lifepoints": "50000", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + } + ] + }, + { + "name": "Exiled kalphite guardian", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled kalphite marauder", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + }, + { + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "1676", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Kalphite King", + "slayer-exp": 229, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "720", + "max-necromancy": "0" + } + ] + }, + { + "name": "Exiled kalphite paragon", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "240", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled kalphite soldier", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 147, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled kalphite worker", + "variants": [{ + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 109.80000305175781, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kalphite Guardian", + "variants": [{ + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 260, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 85.80000305175781, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 95, + "lifepoints": "5200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kalphite King", + "variants": [ + { + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 6500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2145, + "max-melee": "2560", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Magic", + "slayer-exp": 3963, + "lifepoints": "260000", + "max-ranged": "1280", + "max-magic": "2560", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 6500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2145, + "max-melee": "2560", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Melee", + "slayer-exp": 3963, + "lifepoints": "260000", + "max-ranged": "1280", + "max-magic": "2560", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 6500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2145, + "max-melee": "2560", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Ranged", + "slayer-exp": 3963, + "lifepoints": "260000", + "max-ranged": "1280", + "max-magic": "2560", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kalphite Queen", + "variants": [ + { + "image": "", + "level": "333", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "First form", + "slayer-exp": 1309.4000244140625, + "lifepoints": "40000", + "max-ranged": "980", + "max-magic": "980", + "max-necromancy": "0" + }, + { + "image": "", + "level": "333", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Second form", + "slayer-exp": 1309.4000244140625, + "lifepoints": "40000", + "max-ranged": "980", + "max-magic": "980", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kalphite Soldier", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 235, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 77.5, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 75.4000015258789, + "lifepoints": "4700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kalphite Worker", + "variants": [{ + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 210, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 69.30000305175781, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 59.29999923706055, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Killerwatt", + "variants": [{ + "image": "", + "level": "55", + "defence": "44", + "slayer-level": "37", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 32.599998474121094, + "lifepoints": "3600", + "max-ranged": "510", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kurask", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "70", + "experience": 280, + "susceptible": ["<\/a>"], + "lifepoint-exp": 92.4000015258789, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Examine #1", + "slayer-exp": 115, + "lifepoints": "5600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "70", + "experience": 280, + "susceptible": ["<\/a>"], + "lifepoint-exp": 92.4000015258789, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Examine #2", + "slayer-exp": 115, + "lifepoints": "5600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Engorged lava strykewyrm", + "variants": [{ + "image": "", + "level": "113", + "defence": "70", + "slayer-level": "1", + "experience": 9250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3052.5, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 29105, + "lifepoints": "185000", + "max-ranged": "1400", + "max-magic": "1400", + "max-necromancy": "0" + }] + }, + { + "name": "Lava strykewyrm", + "variants": [{ + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "94", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "1788", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 1872, + "lifepoints": "30000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "Lava strykewyrm (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "101", + "defence": "70", + "slayer-level": "1", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "1117", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 3100, + "lifepoints": "30000", + "max-ranged": "1117", + "max-magic": "1117", + "max-necromancy": "0" + }] + }, + { + "name": "WildyWyrm (2015, historical)", + "variants": [{ + "image": "", + "level": "92", + "defence": "80", + "slayer-level": "1", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "2212", + "weakness": ["<\/a>"], + "max-spec": "4700", + "name": "Default", + "slayer-exp": 16462.599609375, + "lifepoints": "1000000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "0" + }] + }, + { + "name": "Lesser demon (Wizards' Tower)", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "200", + "max-necromancy": "0" + }] + }, + { + "name": "Living rock patriarch", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 320, + "lifepoints": "25000", + "max-ranged": "1000", + "max-magic": "1000", + "max-necromancy": "0" + }] + }, + { + "name": "Living rock protector", + "variants": [{ + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 275, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.69999694824219, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 156, + "lifepoints": "5500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Living rock striker", + "variants": [{ + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 275, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.69999694824219, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 156, + "lifepoints": "5500", + "max-ranged": "500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Wyvern", + "variants": [{ + "image": "", + "level": "127", + "defence": "91", + "slayer-level": "96", + "experience": 1125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1310", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1878.800048828125, + "lifepoints": "22500", + "max-ranged": "1310", + "max-magic": "1310", + "max-necromancy": "?" + }] + }, + { + "name": "Wyvern (elite)", + "variants": [{ + "image": "", + "level": "133", + "defence": "95", + "slayer-level": "96", + "experience": 2250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 742.5, + "max-melee": "1339", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 2654, + "lifepoints": "45000", + "max-ranged": "1339", + "max-magic": "1339", + "max-necromancy": "?" + }] + }, + { + "name": "Minotaur", + "variants": [ + { + "image": "", + "level": "12", + "defence": "8", + "slayer-level": "1", + "experience": 87.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 28.799999237060547, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 12", + "slayer-exp": 16.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "15", + "defence": "10", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 15", + "slayer-exp": 46.400001525878906, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 80, + "susceptible": ["<\/a>"], + "lifepoint-exp": 26.399999618530273, + "max-melee": "128", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 44 (Slayer challenge)", + "slayer-exp": -2, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mogre", + "variants": [{ + "image": "", + "level": "45", + "defence": "39", + "slayer-level": "32", + "experience": 315, + "susceptible": ["<\/a>"], + "lifepoint-exp": 103.9000015258789, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 27, + "lifepoints": "6300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Molanisk", + "variants": [{ + "image": "", + "level": "44", + "defence": "38", + "slayer-level": "39", + "experience": 307.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 101.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 49.599998474121094, + "lifepoints": "6150", + "max-ranged": "500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Moss giant", + "variants": [ + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (1)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (2)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (3)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (4)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (5)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "24", + "defence": "20", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "216", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Glarial's Tomb", + "slayer-exp": 60, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bladed muspah", + "variants": [{ + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "76", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 469, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Force muspah", + "variants": [{ + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "76", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 469, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "500", + "max-necromancy": "0" + }] + }, + { + "name": "Throwing muspah", + "variants": [{ + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "76", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 469, + "lifepoints": "20000", + "max-ranged": "500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated jadinko baby", + "variants": [{ + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "80", + "experience": 167.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 55.20000076293945, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 98.5999984741211, + "lifepoints": "3350", + "max-ranged": "0", + "max-magic": "268", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated jadinko guard", + "variants": [{ + "image": "", + "level": "96", + "defence": "69", + "slayer-level": "86", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 188.39999389648438, + "lifepoints": "6000", + "max-ranged": "500", + "max-magic": "500", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated jadinko male", + "variants": [{ + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "91", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 209.60000610351562, + "lifepoints": "6000", + "max-ranged": "600", + "max-magic": "600", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated zygomite", + "variants": [ + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "57", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 58", + "slayer-exp": 31, + "lifepoints": "2100", + "max-ranged": "168", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "57", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 65", + "slayer-exp": 42, + "lifepoints": "2500", + "max-ranged": "188", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nechryael", + "variants": [{ + "image": "", + "level": "96", + "defence": "69", + "slayer-level": "80", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "276", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 251.60000610351562, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nechryael (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "80", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 251.60000610351562, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nechryael (elite)", + "variants": [{ + "image": "", + "level": "106", + "defence": "69", + "slayer-level": "80", + "experience": 1600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 528, + "max-melee": "828", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1120, + "lifepoints": "32000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nightmare", + "variants": [{ + "image": "", + "level": "128", + "defence": "92", + "slayer-level": "80", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "1324", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1540, + "lifepoints": "35000", + "max-ranged": "1324", + "max-magic": "1324", + "max-necromancy": "0" + }] + }, + { + "name": "Blood nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "76", + "experience": 1250, + "susceptible": [], + "lifepoint-exp": 412.5, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "boss", + "slayer-exp": 705.4000244140625, + "lifepoints": "25000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "76", + "experience": 1250, + "susceptible": [], + "lifepoint-exp": 412.5, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "normal", + "slayer-exp": 705.4000244140625, + "lifepoints": "25000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "boss", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "1000", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "normal", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + } + ] + }, + { + "name": "Shadow nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "boss", + "slayer-exp": 423, + "lifepoints": "15000", + "max-ranged": "1000", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "normal", + "slayer-exp": 423, + "lifepoints": "15000", + "max-ranged": "768", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Smoke nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "boss", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "1000", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "normal", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kerapac, the bound", + "variants": [ + { + "image": "", + "level": "3000", + "defence": "80", + "slayer-level": "1", + "experience": 11250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3712.5, + "max-melee": "1339", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Hard mode", + "slayer-exp": 16700, + "lifepoints": "450000", + "max-ranged": "1339", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "3000", + "defence": "80", + "slayer-level": "1", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1339", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 16700, + "lifepoints": "200000", + "max-ranged": "1339", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nodon enforcer", + "variants": [{ + "image": "", + "level": "200", + "defence": "99", + "slayer-level": "92", + "experience": 12500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 4125, + "max-melee": "1561", + "weakness": ["<\/a>"], + "max-spec": "3300", + "name": "Default", + "slayer-exp": 4003, + "lifepoints": "100000", + "max-ranged": "1561", + "max-magic": "1561", + "max-necromancy": "0" + }] + }, + { + "name": "Enclave guard", + "variants": [{ + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 580, + "susceptible": ["<\/a>"], + "lifepoint-exp": 191.39999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 190, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ogre", + "variants": [ + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "288", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Kandarin(Level 67)", + "slayer-exp": 88.4000015258789, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "56", + "defence": "62", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "310", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Combat Camp(56)", + "slayer-exp": 34, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 465, + "susceptible": ["<\/a>"], + "lifepoint-exp": 153.39999389648438, + "max-melee": "310", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon(86)", + "slayer-exp": 232, + "lifepoints": "9300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ogre chieftain", + "variants": [ + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 612, + "susceptible": ["<\/a>"], + "lifepoint-exp": 201.89999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Version 1", + "slayer-exp": 200, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 612, + "susceptible": ["<\/a>"], + "lifepoint-exp": 201.89999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Version 2", + "slayer-exp": 200, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 612, + "susceptible": ["<\/a>"], + "lifepoint-exp": 201.89999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Version 3", + "slayer-exp": 200, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ogress", + "variants": [{ + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 33, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ogress champion", + "variants": [{ + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": ["<\/a>"], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 44, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ogress warrior", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 38.20000076293945, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skogre", + "variants": [ + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 26.799999237060547, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 26.799999237060547, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 26.799999237060547, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zogre", + "variants": [ + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Otherworldly being", + "variants": [{ + "image": "", + "level": "55", + "defence": "35", + "slayer-level": "1", + "experience": 282.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 93.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 34, + "lifepoints": "5650", + "max-ranged": "0", + "max-magic": "900", + "max-necromancy": "0" + }] + }, + { + "name": "Pyrefiend", + "variants": [ + { + "image": "", + "level": "38", + "defence": "25", + "slayer-level": "30", + "experience": 202.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 66.80000305175781, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 38", + "slayer-exp": 32.599998474121094, + "lifepoints": "4050", + "max-ranged": "0", + "max-magic": "600", + "max-necromancy": "0" + }, + { + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "30", + "experience": 330, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 108.9000015258789, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon", + "slayer-exp": -1, + "lifepoints": "6600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Pyrefiend (The Zamorakian Undercity)", + "variants": [{ + "image": "", + "level": "113", + "defence": "75", + "slayer-level": "30", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "576", + "max-magic": "1267", + "max-necromancy": "0" + }] + }, + { + "name": "Pyrefiend (summoned)", + "variants": [{ + "image": "", + "level": "113", + "defence": "75", + "slayer-level": "?", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "576", + "max-magic": "1267", + "max-necromancy": "0" + }] + }, + { + "name": "Seething Pyrefiend", + "variants": [{ + "image": "", + "level": "119", + "defence": "75", + "slayer-level": "30", + "experience": 800, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 264, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "16000", + "max-ranged": "576", + "max-magic": "1411", + "max-necromancy": "0" + }] + }, + { + "name": "Smoulders", + "variants": [{ + "image": "", + "level": "129", + "defence": "90", + "slayer-level": "1", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "0", + "max-magic": "176", + "max-necromancy": "0" + }] + }, + { + "name": "Smoulders, the Revenger", + "variants": [{ + "image": "", + "level": "152", + "defence": "91", + "slayer-level": "?", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "2113", + "max-magic": "2388", + "max-necromancy": "0" + }] + }, + { + "name": "Angry giant rat", + "variants": [ + { + "image": "", + "level": "45", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A Soul's Bane", + "slayer-exp": -1, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest (1)", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest (2)", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crypt rat", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dungeon rat", + "variants": [ + { + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "32", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11 (1)", + "slayer-exp": -1, + "lifepoints": "400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11 (2)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11 (3)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18 (brown)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18 (grey)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18 (brown, arrows)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Giant crypt rat", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 45.29999923706055, + "max-melee": "330", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant rat", + "variants": [ + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (grey)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (brown)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (grey, arrows)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (brown, arrows)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 9 (Stronghold of Security, 1)", + "slayer-exp": -1, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 9 (Stronghold of Security, 2)", + "slayer-exp": -1, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 9 (Stronghold of Security, 3)", + "slayer-exp": -1, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Rat", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Common", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Stronghold of Security", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "N/A", + "defence": "1", + "slayer-level": "1", + "experience": 12.399999618530273, + "susceptible": [], + "lifepoint-exp": 4, + "max-melee": "−20", + "weakness": [], + "max-spec": "?", + "name": "Ratcatchers", + "slayer-exp": -1, + "lifepoints": "10", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped rat", + "variants": [{ + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 95, + "susceptible": ["<\/a>"], + "lifepoint-exp": 31.299999237060547, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8, + "lifepoints": "1900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Slasher Demon", + "variants": [{ + "image": "", + "level": "138", + "defence": "99", + "slayer-level": "96", + "experience": 3356.300048828125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1107.5, + "max-melee": "979", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Default", + "slayer-exp": 5299.7998046875, + "lifepoints": "67126", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Rock slug", + "variants": [{ + "image": "", + "level": "28", + "defence": "25", + "slayer-level": "20", + "experience": 202.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 66.80000305175781, + "max-melee": "375", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 33.599998474121094, + "lifepoints": "4050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Elite rune dragon", + "variants": [ + { + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "1", + "experience": 5259.39990234375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1735.5999755859375, + "max-melee": "2992", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Armoured", + "slayer-exp": 3399, + "lifepoints": "105188", + "max-ranged": "2992", + "max-magic": "2992", + "max-necromancy": "0" + }, + { + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "1", + "experience": 5259.39990234375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1735.5999755859375, + "max-melee": "2992", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Unarmoured", + "slayer-exp": 3399, + "lifepoints": "105188", + "max-ranged": "2992", + "max-magic": "2992", + "max-necromancy": "0" + } + ] + }, + { + "name": "Locust lancer", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 91, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Locust ranger", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "165", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 100, + "lifepoints": "2750", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Locust rider", + "variants": [ + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "810", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (1)", + "slayer-exp": -1, + "lifepoints": "2700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Range (1)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (2)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Range (2)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (3)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Range (3)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Scabaras lancer", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 55, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Scabaras mage", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "618", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 55, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }] + }, + { + "name": "Scabaras ranger", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 275, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 90.69999694824219, + "max-melee": "165", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 109.5, + "lifepoints": "5500", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Scarab akh", + "variants": [{ + "image": "", + "level": "122", + "defence": "80", + "slayer-level": "109", + "experience": 1100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 363, + "max-melee": "921", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 715, + "lifepoints": "22000", + "max-ranged": "921", + "max-magic": "921", + "max-necromancy": "0" + }] + }, + { + "name": "Scarab mage", + "variants": [ + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "0", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "607", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Sophanem Dungeon", + "slayer-exp": 55, + "lifepoints": "2700", + "max-ranged": "0", + "max-magic": "810", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Contact!", + "slayer-exp": 55, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "1215", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dominion Tower", + "slayer-exp": 55, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "1215", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Rumble Mode", + "slayer-exp": 55, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "1215", + "max-necromancy": "0" + } + ] + }, + { + "name": "Small scarab", + "variants": [ + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 75, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 24.700000762939453, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Uzer Mastaba", + "slayer-exp": 17, + "lifepoints": "1500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zombie (1)", + "slayer-exp": 17, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zombie (2)", + "slayer-exp": 17, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zombie (3)", + "slayer-exp": 17, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "50", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Do No Evil", + "slayer-exp": -1, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Grave scorpion", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7.199999809265137, + "lifepoints": "1000", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "King Scorpion", + "variants": [{ + "image": "", + "level": "22", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 48, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pit Scorpion", + "variants": [{ + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 162.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 53.599998474121094, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 26.799999237060547, + "lifepoints": "3250", + "max-ranged": "800", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Poison Scorpion", + "variants": [{ + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 282.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 93.19999694824219, + "max-melee": "700", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 21.600000381469727, + "lifepoints": "5650", + "max-ranged": "700", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Scorpion", + "variants": [ + { + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 14", + "slayer-exp": 25, + "lifepoints": "2000", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "26", + "defence": "19", + "slayer-level": "1", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 26 (Stronghold of Security, 1)", + "slayer-exp": -1, + "lifepoints": "3150", + "max-ranged": "475", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "26", + "defence": "19", + "slayer-level": "1", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 26 (Stronghold of Security, 2)", + "slayer-exp": -1, + "lifepoints": "3150", + "max-ranged": "475", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Scorpion (Ape Atoll)", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9.199999809265137, + "lifepoints": "1000", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea Snake Hatchling", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "40", + "experience": 175, + "susceptible": ["<\/a>"], + "lifepoint-exp": 57.70000076293945, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 50, + "lifepoints": "3500", + "max-ranged": "225", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea Snake Young", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "40", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 85, + "lifepoints": "4500", + "max-ranged": "225", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Blissful shadow", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 564.4000244140625, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Manifest shadow", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 929.4000244140625, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Shadow (Temple of Light)", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1.600000023841858, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 103.5999984741211, + "lifepoints": "100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Truthful shadow", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1008", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 343.6000061035156, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeletal Wyvern", + "variants": [ + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "1", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "2", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "3", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "4", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bossy McBossFace's First mate", + "variants": [{ + "image": "", + "level": "122", + "defence": "78", + "slayer-level": "1", + "experience": 1100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 363, + "max-melee": "1886.4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "22000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant skeleton (Shadow Dungeon)", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": ["<\/a>"], + "lifepoint-exp": 49.5, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant skeleton (Tarn's Lair)", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Huge skeleton", + "variants": [ + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 198, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 608, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 608, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeletal miner", + "variants": [{ + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 21.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeletal shielder", + "variants": [] + }, + { + "name": "Skeleton", + "variants": [ + { + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 105, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 34.599998474121094, + "max-melee": "44", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 15", + "slayer-exp": 8.800000190734863, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "16", + "defence": "12", + "slayer-level": "1", + "experience": 30, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 9.899999618530273, + "max-melee": "48", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 16", + "slayer-exp": 9.199999809265137, + "lifepoints": "600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 57.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 18.899999618530273, + "max-melee": "92", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 32", + "slayer-exp": 13, + "lifepoints": "1150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 46", + "slayer-exp": 39.400001525878906, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "51", + "defence": "37", + "slayer-level": "1", + "experience": 297.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 98.0999984741211, + "max-melee": "740", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 51", + "slayer-exp": 47.20000076293945, + "lifepoints": "5950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 58", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Ape Atoll)", + "variants": [{ + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 102.4000015258789, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton (Barrows)", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "372", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "86", + "slayer-exp": 77.19999694824219, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 157.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.900001525878906, + "max-melee": "378", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "88", + "slayer-exp": 81, + "lifepoints": "3150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Dark Warriors' Fortress)", + "variants": [ + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 57.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 18.899999618530273, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": -1, + "lifepoints": "1150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 57.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 18.899999618530273, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": -1, + "lifepoints": "1150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton (Lumbridge Catacombs)", + "variants": [{ + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 105, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 34.599998474121094, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8.800000190734863, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton (Tarn's Lair)", + "variants": [ + { + "image": "", + "level": "79", + "defence": "57", + "slayer-level": "1", + "experience": 142.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 60.599998474121094, + "lifepoints": "2850", + "max-ranged": "0", + "max-magic": "228", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "8", + "slayer-exp": 47.400001525878906, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Temple Trekking)", + "variants": [ + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 8.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2.799999952316284, + "max-melee": "7", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "18", + "slayer-exp": 2.4000000953674316, + "lifepoints": "170", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "28", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Helmet", + "slayer-exp": 18.600000381469727, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "28", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "No helmet", + "slayer-exp": 18.600000381469727, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Ullek)", + "variants": [ + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Warhammer", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Axe", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Round shield", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Square shield", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Mace", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Uncharted Isles)", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 550, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 181.5, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (With Weapons)", + "slayer-exp": 98.5999984741211, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 550, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 181.5, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (Without Weapons)", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 550, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 181.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "1515", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton Archer", + "variants": [ + { + "image": "", + "level": "100", + "defence": "67", + "slayer-level": "0", + "experience": 729, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240.5, + "max-melee": "369", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "10000", + "max-ranged": "369", + "max-magic": "369", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "?", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton Mage", + "variants": [ + { + "image": "", + "level": "19", + "defence": "14", + "slayer-level": "1", + "experience": 35, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 11.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 19", + "slayer-exp": 9.399999618530273, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "56", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 49", + "slayer-exp": 21.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "140", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton archer (Ancient Awakening)", + "variants": [ + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton brute", + "variants": [{ + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 157.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.900001525878906, + "max-melee": "252", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "3150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton fremennik", + "variants": [ + { + "image": "", + "level": "23", + "defence": "17", + "slayer-level": "1", + "experience": 42.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 14, + "max-melee": "102", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 23", + "slayer-exp": 10.199999809265137, + "lifepoints": "850", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "28", + "defence": "22", + "slayer-level": "1", + "experience": 55, + "susceptible": ["<\/a>"], + "lifepoint-exp": 18.100000381469727, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 28", + "slayer-exp": 11.399999618530273, + "lifepoints": "1100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "1", + "experience": 55, + "susceptible": ["<\/a>"], + "lifepoint-exp": 18.100000381469727, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 30", + "slayer-exp": 12.600000381469727, + "lifepoints": "1100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton heavy", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 160, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 52.79999923706055, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 85.19999694824219, + "lifepoints": "3200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton hero", + "variants": [{ + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 43.70000076293945, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton knight", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 259.79998779296875, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton ranger (Ancient Awakening)", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 670.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 221.10000610351562, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "13405", + "max-ranged": "1875", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 957.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 315.8999938964844, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "19150", + "max-ranged": "1875", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1436.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 473.8999938964844, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "28725", + "max-ranged": "1875", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton thug", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 73.5999984741211, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton warlord", + "variants": [{ + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 162.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 53.599998474121094, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 89.4000015258789, + "lifepoints": "3250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton warrior (Ancient Awakening)", + "variants": [{ + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "?", + "experience": 603.9000244140625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 199.1999969482422, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton warrior (Rasial)", + "variants": [] + }, + { + "name": "Summoned skeleton", + "variants": [ + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "0", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "1415", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 1165, + "lifepoints": "9000", + "max-ranged": "1415", + "max-magic": "1415", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "0", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "1415", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 1165, + "lifepoints": "4500", + "max-ranged": "1415", + "max-magic": "1415", + "max-necromancy": "0" + } + ] + }, + { + "name": "Summoned skeleton archer", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "2000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "0", + "experience": 50, + "susceptible": [], + "lifepoint-exp": 16.5, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Training dummy", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Permanent", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to air, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to air, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to air, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to water, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to water, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to water, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to earth, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to earth, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to earth, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to fire, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to fire, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to fire, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to nothing, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to nothing, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to nothing, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to stab, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to stab, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to stab, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to slash, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to slash, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to slash, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to crush, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to crush, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to crush, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to nothing, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to nothing, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to nothing, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to arrows, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to arrows, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to arrows, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to bolts, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to bolts, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to bolts, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to thrown, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to thrown, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to thrown, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to nothing, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to nothing, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to nothing, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dragon (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dragon (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dragon (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Undead (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Undead (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Undead (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Demon (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Demon (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Demon (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abyssal demon (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abyssal demon (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abyssal demon (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Wallasalki (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Wallasalki (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Wallasalki (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Basilisk (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Basilisk (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Basilisk (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Revenant (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Revenant (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Revenant (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Undead one", + "variants": [ + { + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 72.5999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Skeleton (level 44)", + "slayer-exp": 18.799999237060547, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 75.9000015258789, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Skeleton (level 46)", + "slayer-exp": 19.600000381469727, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 72.5999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "128", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Zombie (level 44)", + "slayer-exp": 18.799999237060547, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 75.9000015258789, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Zombie (level 46)", + "slayer-exp": 19.600000381469727, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped skeleton", + "variants": [ + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1684.8", + "max-necromancy": "0" + }, + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "1684.8", + "max-necromancy": "0" + } + ] + }, + { + "name": "Feline akh", + "variants": [{ + "image": "", + "level": "109", + "defence": "76", + "slayer-level": "107", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1166", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 536.2000122070312, + "lifepoints": "15000", + "max-ranged": "1166", + "max-magic": "1166", + "max-necromancy": "0" + }] + }, + { + "name": "Gorilla akh", + "variants": [{ + "image": "", + "level": "111", + "defence": "70", + "slayer-level": "113", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "1300", + "name": "Default", + "slayer-exp": 705.4000244140625, + "lifepoints": "20000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Imperial mage akh", + "variants": [{ + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "117", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1780.5999755859375, + "lifepoints": "25000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Imperial ranger akh", + "variants": [{ + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "117", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1780.5999755859375, + "lifepoints": "25000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Imperial warrior akh", + "variants": [{ + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "117", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1780.5999755859375, + "lifepoints": "25000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Oreb, the Magister", + "variants": [{ + "image": "", + "level": "899", + "defence": "90", + "slayer-level": "0", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1425", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "200000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "0" + }] + }, + { + "name": "Salawa akh", + "variants": [{ + "image": "", + "level": "106", + "defence": "73", + "slayer-level": "105", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 508.3999938964844, + "lifepoints": "12500", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "The Magister", + "variants": [{ + "image": "", + "level": "899", + "defence": "90", + "slayer-level": "115", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1425", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "200000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "0" + }] + }, + { + "name": "Soulgazer (elite)", + "variants": [{ + "image": "", + "level": "135", + "defence": "90", + "slayer-level": "99", + "experience": 6000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1980, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 5849.2001953125, + "lifepoints": "120000", + "max-ranged": "0", + "max-magic": "1738", + "max-necromancy": "0" + }] + }, + { + "name": "Corpse spider", + "variants": [{ + "image": "", + "level": "4", + "defence": "3", + "slayer-level": "1", + "experience": 30, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 9.899999618530273, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "600", + "max-ranged": "60", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Crypt spider", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "270", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 34.20000076293945, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Deadly red spider", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 307.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 101.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 103.5999984741211, + "lifepoints": "6150", + "max-ranged": "1360", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant crypt spider", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": ["<\/a>"], + "lifepoint-exp": 49.5, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant spider", + "variants": [ + { + "image": "", + "level": "2", + "defence": "2", + "slayer-level": "1", + "experience": 27.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 9, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 2", + "slayer-exp": 6.400000095367432, + "lifepoints": "550", + "max-ranged": "40", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 33", + "slayer-exp": 13.399999618530273, + "lifepoints": "3900", + "max-ranged": "480", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "19", + "slayer-level": "1", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29", + "slayer-exp": 31.200000762939453, + "lifepoints": "3150", + "max-ranged": "480", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice spider", + "variants": [{ + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 120, + "susceptible": ["<\/a>"], + "lifepoint-exp": 39.599998474121094, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 17.200000762939453, + "lifepoints": "2400", + "max-ranged": "600", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jungle spider", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 272.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 89.9000015258789, + "max-melee": "1240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Common", + "slayer-exp": 77, + "lifepoints": "5450", + "max-ranged": "1240", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.20000076293945, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.199999809265137, + "max-melee": "56", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Musa Point", + "slayer-exp": 9, + "lifepoints": "750", + "max-ranged": "56", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 312.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 103, + "max-melee": "189", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ape Atoll", + "slayer-exp": -1, + "lifepoints": "3150", + "max-ranged": "252", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 66.9000015258789, + "susceptible": ["<\/a>"], + "lifepoint-exp": 22, + "max-melee": "90", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Jade Vine (level 42)", + "slayer-exp": -1, + "lifepoints": "1500", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 83.0999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.399999618530273, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Jade Vine (level 49)", + "slayer-exp": -1, + "lifepoints": "1750", + "max-ranged": "140", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 272.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 89.9000015258789, + "max-melee": "1240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Tai Bwo Wannai Cleanup", + "slayer-exp": -1, + "lifepoints": "5450", + "max-ranged": "1240", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lava spider", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": 491, + "lifepoints": "15000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": 245.5, + "lifepoints": "15000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Poison spider", + "variants": [ + { + "image": "", + "level": "53", + "defence": "45", + "slayer-level": "1", + "experience": 185, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common", + "slayer-exp": 34.20000076293945, + "lifepoints": "3700", + "max-ranged": "600", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 27.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 9, + "max-melee": "33", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Observatory", + "slayer-exp": 8.800000190734863, + "lifepoints": "550", + "max-ranged": "44", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Shadow spider", + "variants": [{ + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.600000381469727, + "lifepoints": "1650", + "max-ranged": "132", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Spider", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common", + "slayer-exp": 6.400000095367432, + "lifepoints": "50", + "max-ranged": "4", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "3", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Underground Pass", + "slayer-exp": 6.400000095367432, + "lifepoints": "50", + "max-ranged": "4", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "3", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ape Atoll", + "slayer-exp": 17.600000381469727, + "lifepoints": "50", + "max-ranged": "4", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Stronghold of Security", + "slayer-exp": 6.400000095367432, + "lifepoints": "1050", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spyndra", + "variants": [ + { + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "0" + }, + { + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": 3760.89990234375, + "lifepoints": "180000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "0" + } + ] + }, + { + "name": "Veil-ripper Ozharakha", + "variants": [{ + "image": "", + "level": "135", + "defence": "90", + "slayer-level": "99", + "experience": 7500, + "susceptible": [], + "lifepoint-exp": 2475, + "max-melee": "1104", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 25000, + "lifepoints": "150000", + "max-ranged": "1104", + "max-magic": "1104", + "max-necromancy": "0" + }] + }, + { + "name": "Suqah", + "variants": [ + { + "image": "", + "level": "73", + "defence": "50", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [], + "lifepoint-exp": 43.70000076293945, + "max-melee": "380", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 73 (Dual wielding swords)", + "slayer-exp": 47.400001525878906, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "380", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "60", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [], + "lifepoint-exp": 43.70000076293945, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 74", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "60", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [], + "lifepoint-exp": 43.70000076293945, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 74 (Magic)", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "79", + "defence": "60", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 79", + "slayer-exp": 57.599998474121094, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "349", + "max-necromancy": "0" + } + ] + }, + { + "name": "Terror dog", + "variants": [ + { + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "40", + "experience": 235, + "susceptible": ["<\/a>"], + "lifepoint-exp": 77.5, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 65", + "slayer-exp": 75.4000015258789, + "lifepoints": "4700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "40", + "experience": 220, + "susceptible": ["<\/a>"], + "lifepoint-exp": 72.5999984741211, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 61", + "slayer-exp": 65.19999694824219, + "lifepoints": "4400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice troll", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "38", + "experience": 525, + "susceptible": ["<\/a>"], + "lifepoint-exp": 173.1999969482422, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Troll Romance", + "slayer-exp": 70, + "lifepoints": "10500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "38", + "experience": 525, + "susceptible": ["<\/a>"], + "lifepoint-exp": 173.1999969482422, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Desert Treasure", + "slayer-exp": 70, + "lifepoints": "10500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice troll female", + "variants": [{ + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.5, + "lifepoints": "8200", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice troll grunt", + "variants": [{ + "image": "", + "level": "68", + "defence": "50", + "slayer-level": "1", + "experience": 420, + "susceptible": ["<\/a>"], + "lifepoint-exp": 138.60000610351562, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice troll male", + "variants": [{ + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.5, + "lifepoints": "8200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice troll runt", + "variants": [{ + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 307.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 101.4000015258789, + "max-melee": "760", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 24.799999237060547, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kraka", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 657.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 216.89999389648438, + "max-melee": "1800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "13150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mountain troll", + "variants": [{ + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 460, + "susceptible": ["<\/a>"], + "lifepoint-exp": 151.8000030517578, + "max-melee": "1620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 52.20000076293945, + "lifepoints": "9200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mountain troll (well)", + "variants": [{ + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 7, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pee Hat", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 657.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 216.89999389648438, + "max-melee": "1800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "13150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "River troll", + "variants": [{ + "image": "", + "level": "N/A", + "defence": "130", + "slayer-level": "1", + "experience": 172.1999969482422, + "susceptible": [], + "lifepoint-exp": 56.79999923706055, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 89.4000015258789, + "lifepoints": "1700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Rock (monster)", + "variants": [{ + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 1395, + "susceptible": ["<\/a>"], + "lifepoint-exp": 460.29998779296875, + "max-melee": "1890", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "27900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Stick", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 670, + "susceptible": ["<\/a>"], + "lifepoint-exp": 221.10000610351562, + "max-melee": "1830", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 73.5999984741211, + "lifepoints": "13400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Stove", + "variants": [{ + "image": "", + "level": "4", + "defence": "3", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "129", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Thrower Troll", + "variants": [ + { + "image": "", + "level": "67", + "defence": "55", + "slayer-level": "1", + "experience": 472.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 155.89999389648438, + "max-melee": "1435", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Death Plateau", + "slayer-exp": 54.79999923706055, + "lifepoints": "9450", + "max-ranged": "1225", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "67", + "defence": "55", + "slayer-level": "1", + "experience": 472.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 155.89999389648438, + "max-melee": "1435", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Trollheim", + "slayer-exp": 54.79999923706055, + "lifepoints": "9450", + "max-ranged": "1225", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Troll brute", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12.800000190734863, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll brute (Davendale)", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "72", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll chucker", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12.800000190734863, + "lifepoints": "250", + "max-ranged": "20", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll chucker (Davendale)", + "variants": [{ + "image": "", + "level": "1", + "defence": "?", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "0", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "72", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Troll general", + "variants": [ + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sword", + "slayer-exp": 89.4000015258789, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Hammer", + "slayer-exp": 89.4000015258789, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Club", + "slayer-exp": 89.4000015258789, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Troll lout", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "72", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll shaman", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "20", + "max-necromancy": "0" + }] + }, + { + "name": "Troll shaman (Davendale)", + "variants": [{ + "image": "", + "level": "1", + "defence": "?", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "0", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "?" + }] + }, + { + "name": "Troll spectator", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 390, + "susceptible": ["<\/a>"], + "lifepoint-exp": 128.6999969482422, + "max-melee": "1175", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 37.599998474121094, + "lifepoints": "7800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead troll", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 77", + "slayer-exp": -1, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (1)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (2)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (3)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (4)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (5)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 86 (1)", + "slayer-exp": -1, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 86 (2)", + "slayer-exp": -1, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 86 (3)", + "slayer-exp": -1, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (1)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (2)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (3)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (4)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (5)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (6)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (7)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Turoth", + "variants": [ + { + "image": "", + "level": "60", + "defence": "44", + "slayer-level": "55", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "60 - Small", + "slayer-exp": 52, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "60", + "defence": "44", + "slayer-level": "55", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "60 - Large", + "slayer-exp": 52, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "50", + "slayer-level": "55", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "960", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "68 - Male", + "slayer-exp": 70.80000305175781, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "50", + "slayer-level": "55", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "960", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "68 - Female", + "slayer-exp": 70.80000305175781, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "TzHaar-Hur", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "310", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 86", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 175, + "susceptible": [], + "lifepoint-exp": 57.70000076293945, + "max-melee": "210", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 98", + "slayer-exp": 0, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + } + ] + }, + { + "name": "TzHaar-Ket", + "variants": [{ + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "TzHaar-Mej", + "variants": [{ + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "310", + "max-necromancy": "0" + }] + }, + { + "name": "TzHaar-Xil", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "0", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "0", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "248", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Animated spade", + "variants": [{ + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Armoured zombie", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 310, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 102.30000305175781, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee", + "slayer-exp": 154.39999389648438, + "lifepoints": "6200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ritual of the Mahjarrat", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "One of a Kind", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Dishonour among Thieves", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Dimension of Disaster", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "New Foundations", + "slayer-exp": 9.600000381469727, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bloated monstrosity", + "variants": [ + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Corpse archer", + "variants": [{ + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 117.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 38.70000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2350", + "max-ranged": "260", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Corpse carrier", + "variants": [ + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Corpse mage", + "variants": [{ + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 43.70000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "300", + "max-necromancy": "0" + }] + }, + { + "name": "Crawling corpse torso", + "variants": [{ + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 40, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 13.199999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 16.600000381469727, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "140", + "max-necromancy": "0" + }] + }, + { + "name": "Dragith Nurn", + "variants": [{ + "image": "", + "level": "26", + "defence": "19", + "slayer-level": "1", + "experience": 395, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 130.3000030517578, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 11, + "lifepoints": "7900", + "max-ranged": "280", + "max-magic": "380", + "max-necromancy": "0" + }] + }, + { + "name": "General malpractitioner", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "3000", + "max-ranged": "240", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Graveside Phantom", + "variants": [{ + "image": "", + "level": "104", + "defence": "70", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Magic axe", + "variants": [{ + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 43.70000076293945, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "1", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Monkey Zombie", + "variants": [ + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "72", + "slayer-exp": 47.400001525878906, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "75", + "slayer-exp": 52.20000076293945, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "77", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mummy (Jaldraocht Pyramid)", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ashes", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Jaldraocht sarcophagus", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mummy (Ullek)", + "variants": [ + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ashes", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Phantom sorcerer", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 259.79998779296875, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "1875", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (standard Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1875", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (hard Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1875", + "max-necromancy": "0" + } + ] + }, + { + "name": "Phantom wizard", + "variants": [ + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "0", + "max-magic": "1500", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "1500", + "max-necromancy": "0" + } + ] + }, + { + "name": "Possessed pickaxe", + "variants": [ + { + "image": "", + "level": "49", + "defence": "?", + "slayer-level": "1", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abandoned Mine", + "slayer-exp": -1, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "?", + "slayer-level": "1", + "experience": 175, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 57.70000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Lair of Tarn Razorlor", + "slayer-exp": -1, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "210", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dominion Tower", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Possessed pickaxe (Lava Flow Mine)", + "variants": [{ + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 20, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 6.599999904632568, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Putrid zombie (Rasial)", + "variants": [] + }, + { + "name": "Soulless armoured zombie", + "variants": [{ + "image": "", + "level": "N/A", + "defence": "30", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "288", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "10000000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Soulless unarmoured zombie", + "variants": [{ + "image": "", + "level": "N/A", + "defence": "?", + "slayer-level": "?", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Taraket the Necromancer", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "1", + "experience": 10000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3300, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "1", + "experience": 10000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3300, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Undead giant (Battle of Forinthry)", + "variants": [ + { + "image": "", + "level": "300", + "defence": "90", + "slayer-level": "?", + "experience": 3063.75, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1011, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "61275", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "90", + "slayer-level": "?", + "experience": 6127.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2022, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "122550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Unstable zombie", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 259.79998779296875, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie", + "variants": [ + { + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 30.899999618530273, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.100000381469727, + "max-melee": "36", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 12", + "slayer-exp": 8, + "lifepoints": "450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "22", + "defence": "16", + "slayer-level": "1", + "experience": 38.099998474121094, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.5, + "max-melee": "64", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 22", + "slayer-exp": 8, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "22", + "defence": "16", + "slayer-level": "1", + "experience": 38.099998474121094, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.5, + "max-melee": "64", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 22 (Graveyard of Shadows)", + "slayer-exp": 8, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "1", + "experience": 46.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 15.300000190734863, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29", + "slayer-exp": 9.800000190734863, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "1", + "experience": 46.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 15.300000190734863, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29 (Entrana)", + "slayer-exp": 8, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "1", + "experience": 46.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 15.300000190734863, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29 (Graveyard of Shadows)", + "slayer-exp": 12, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (New Varrock)", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 1.2000000476837158, + "susceptible": [], + "lifepoint-exp": 0.30000001192092896, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "25", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Zombie cow (New Varrock)", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Boss", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 10, + "susceptible": [], + "lifepoint-exp": 3.299999952316284, + "max-melee": "28", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Regular", + "slayer-exp": -1, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie knight", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 259.79998779296875, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie pirate", + "variants": [ + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 83.0999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.399999618530273, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 49", + "slayer-exp": 21.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "50", + "defence": "36", + "slayer-level": "1", + "experience": 86.69999694824219, + "susceptible": ["<\/a>"], + "lifepoint-exp": 28.600000381469727, + "max-melee": "144", + "weakness": [ + "<\/a>", + "<\/a>" + ], + "max-spec": "0", + "name": "Level 50", + "slayer-exp": 11.199999809265137, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 54, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.799999237060547, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Pieces of Hate", + "slayer-exp": 0, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie swab", + "variants": [{ + "image": "", + "level": "47", + "defence": "34", + "slayer-level": "1", + "experience": 79.80000305175781, + "susceptible": [], + "lifepoint-exp": 26.299999237060547, + "max-melee": "136", + "weakness": [ + "<\/a>", + "<\/a>" + ], + "max-spec": "0", + "name": "Default", + "slayer-exp": 22, + "lifepoints": "1700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Zombie warrior", + "variants": [ + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Angry vampyre", + "variants": [{ + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Feral vampyre", + "variants": [ + { + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "1", + "experience": 110, + "susceptible": ["<\/a>"], + "lifepoint-exp": 36.29999923706055, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard", + "slayer-exp": 32.599998474121094, + "lifepoints": "2200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "1", + "experience": 110, + "susceptible": ["<\/a>"], + "lifepoint-exp": 36.29999923706055, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Spider", + "slayer-exp": 32.599998474121094, + "lifepoints": "2200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Vampyre", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 170.39999389648438, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Vampyre Juvenile", + "variants": [ + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [], + "lifepoint-exp": 33, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Burgh de Rott", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "?", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Meiyerditch", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Vampyre Juvinate", + "variants": [ + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": [], + "lifepoint-exp": 34.599998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Burgh de Rott (Level 58)", + "slayer-exp": 210, + "lifepoints": "2100", + "max-ranged": "168", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "60", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [], + "lifepoint-exp": 160.8000030517578, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Burgh de Rott (Level 63)", + "slayer-exp": 210, + "lifepoints": "9750", + "max-ranged": "576", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "61", + "defence": "60", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [], + "lifepoint-exp": 160.8000030517578, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Meiyerditch", + "slayer-exp": 210, + "lifepoints": "9750", + "max-ranged": "576", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [], + "lifepoint-exp": 160.8000030517578, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Darkmeyer", + "slayer-exp": 210, + "lifepoints": "9750", + "max-ranged": "576", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Devil's snare", + "variants": [{ + "image": "", + "level": "220", + "defence": "70", + "slayer-level": "90", + "experience": 2100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 693, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1760, + "lifepoints": "42000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Lampenflora", + "variants": [{ + "image": "", + "level": "216", + "defence": "70", + "slayer-level": "102", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "3600", + "name": "Default", + "slayer-exp": 1331.800048828125, + "lifepoints": "25000", + "max-ranged": "0", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Liverworts", + "variants": [{ + "image": "", + "level": "228", + "defence": "70", + "slayer-level": "110", + "experience": 3000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 990, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "4104", + "name": "Default", + "slayer-exp": 3338.39990234375, + "lifepoints": "60000", + "max-ranged": "1368", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Luminous snaggler", + "variants": [{ + "image": "", + "level": "224", + "defence": "70", + "slayer-level": "95", + "experience": 2900, + "susceptible": ["<\/a>"], + "lifepoint-exp": 957, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "6900", + "name": "Default", + "slayer-exp": 1664.800048828125, + "lifepoints": "58000", + "max-ranged": "0", + "max-magic": "2300", + "max-necromancy": "0" + }] + }, + { + "name": "Vyrelady", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "3", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "4", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "5", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "6", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + } + ] + }, + { + "name": "Vyrelord", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "3", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "4", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "5", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "6", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + } + ] + }, + { + "name": "Vyrewatch", + "variants": [ + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 70", + "slayer-exp": 43.20000076293945, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "200", + "max-necromancy": "?" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": ["<\/a>"], + "lifepoint-exp": 42.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 72", + "slayer-exp": 47.400001525878906, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 135, + "susceptible": ["<\/a>"], + "lifepoint-exp": 44.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 75", + "slayer-exp": 52.20000076293945, + "lifepoints": "2700", + "max-ranged": "0", + "max-magic": "216", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": ["<\/a>"], + "lifepoint-exp": 46.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 78", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "?", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 86", + "slayer-exp": 238.6999969482422, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "595", + "max-necromancy": "?" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "?", + "experience": 528, + "susceptible": ["<\/a>"], + "lifepoint-exp": 174.1999969482422, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 91", + "slayer-exp": 364.5, + "lifepoints": "10560", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "?", + "experience": 175, + "susceptible": ["<\/a>"], + "lifepoint-exp": 57.70000076293945, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Easy Route)", + "slayer-exp": -1, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "?", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Medium Route)", + "slayer-exp": -1, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "97", + "defence": "60", + "slayer-level": "?", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Hard Route)", + "slayer-exp": -1, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "70", + "defence": "?", + "slayer-level": "?", + "experience": 406, + "susceptible": [], + "lifepoint-exp": 133.89999389648438, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 70 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "8120", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + }, + { + "image": "", + "level": "72", + "defence": "?", + "slayer-level": "?", + "experience": 422.5, + "susceptible": [], + "lifepoint-exp": 139.39999389648438, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 72 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "8450", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "?", + "slayer-level": "?", + "experience": 438.5, + "susceptible": [], + "lifepoint-exp": 144.6999969482422, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 75 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "8770", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "?", + "slayer-level": "?", + "experience": 455, + "susceptible": [], + "lifepoint-exp": 150.10000610351562, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 78 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "9100", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + } + ] + }, + { + "name": "Wall beast", + "variants": [{ + "image": "", + "level": "45", + "defence": "34", + "slayer-level": "35", + "experience": 272.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 89.9000015258789, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 20.600000381469727, + "lifepoints": "5450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Warped terrorbird", + "variants": [ + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "7", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "7 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "8", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "8 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "9", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "9 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped tortoise", + "variants": [ + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "56", + "experience": 260, + "susceptible": ["<\/a>"], + "lifepoint-exp": 85.80000305175781, + "max-melee": "156", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Immune", + "slayer-exp": 95, + "lifepoints": "5200", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "?" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "56", + "experience": 260, + "susceptible": ["<\/a>"], + "lifepoint-exp": 85.80000305175781, + "max-melee": "156", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Vulnerable", + "slayer-exp": 95, + "lifepoints": "5200", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "?" + } + ] + }, + { + "name": "Maelstrom, Raging Waterfiend", + "variants": [{ + "image": "", + "level": "142", + "defence": "77", + "slayer-level": "?", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10000, + "lifepoints": "180000", + "max-ranged": "2113", + "max-magic": "2388", + "max-necromancy": "0" + }] + }, + { + "name": "Torrential Waterfiend", + "variants": [{ + "image": "", + "level": "118", + "defence": "77", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "18000", + "max-ranged": "1727", + "max-magic": "1727", + "max-necromancy": "0" + }] + }, + { + "name": "Torrential Waterfiend (summoned)", + "variants": [{ + "image": "", + "level": "118", + "defence": "77", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "18000", + "max-ranged": "1727", + "max-magic": "1727", + "max-necromancy": "0" + }] + }, + { + "name": "Waterfiend", + "variants": [{ + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 335, + "lifepoints": "8000", + "max-ranged": "800", + "max-magic": "800", + "max-necromancy": "?" + }] + }, + { + "name": "Waterfiend (Ghorrock)", + "variants": [ + { + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "739", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "102", + "slayer-exp": 290.79998779296875, + "lifepoints": "8000", + "max-ranged": "739", + "max-magic": "739", + "max-necromancy": "?" + }, + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "107", + "slayer-exp": -1, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "720", + "max-necromancy": "?" + } + ] + }, + { + "name": "Waterfiend (Temple of Aminishi)", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 700, + "susceptible": [], + "lifepoint-exp": 231, + "max-melee": "936", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "14000", + "max-ranged": "936", + "max-magic": "936", + "max-necromancy": "?" + }, + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 700, + "susceptible": [], + "lifepoint-exp": 231, + "max-melee": "936", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "14000", + "max-ranged": "936", + "max-magic": "936", + "max-necromancy": "?" + } + ] + }, + { + "name": "Waterfiend (The Zamorakian Undercity)", + "variants": [{ + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "1", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 600, + "lifepoints": "9000", + "max-ranged": "1506", + "max-magic": "1506", + "max-necromancy": "?" + }] + }, + { + "name": "Waterfiend (elite)", + "variants": [ + { + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "1", + "experience": 1600, + "susceptible": [], + "lifepoint-exp": 528, + "max-melee": "2400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Ancient Cavern", + "slayer-exp": 1181.4000244140625, + "lifepoints": "32000", + "max-ranged": "2400", + "max-magic": "2400", + "max-necromancy": "?" + }, + { + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "1", + "experience": 1600, + "susceptible": [], + "lifepoint-exp": 528, + "max-melee": "2400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Ghorrock", + "slayer-exp": 1181.4000244140625, + "lifepoints": "32000", + "max-ranged": "2400", + "max-magic": "2400", + "max-necromancy": "?" + } + ] + }, + { + "name": "Waterfiend (summoned)", + "variants": [{ + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "?", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "9000", + "max-ranged": "1506", + "max-magic": "1506", + "max-necromancy": "?" + }] + }, + { + "name": "Werewolf", + "variants": [ + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 112.5, + "susceptible": [], + "lifepoint-exp": 37.099998474121094, + "max-melee": "225", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Boris", + "slayer-exp": 34.5, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Imre", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Yuri", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Joseph", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Nikolai", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Eduard", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Lev", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Georgy", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Svetlana", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Irina", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Alexis", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Milla", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Galina", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Sofiya", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ksenia", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Yadviga", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Nikita", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Vera", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Zoja", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Liliya", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon (male)", + "slayer-exp": 171, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon (female)", + "slayer-exp": 171, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Adolescent White wolf", + "variants": [{ + "image": "", + "level": "6", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Big Wolf", + "variants": [ + { + "image": "", + "level": "20", + "defence": "13", + "slayer-level": "1", + "experience": 147.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 48.599998474121094, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "White", + "slayer-exp": 18, + "lifepoints": "2950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "20", + "defence": "13", + "slayer-level": "1", + "experience": 147.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 48.599998474121094, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Grey", + "slayer-exp": 18, + "lifepoints": "2950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Desert wolf", + "variants": [ + { + "image": "", + "level": "12", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 8.800000190734863, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "12", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Grey", + "slayer-exp": 8.800000190734863, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dire Wolf", + "variants": [{ + "image": "", + "level": "43", + "defence": "29", + "slayer-level": "1", + "experience": 232.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 76.69999694824219, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.600000381469727, + "lifepoints": "4650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fenris wolf", + "variants": [{ + "image": "", + "level": "46", + "defence": "31", + "slayer-level": "1", + "experience": 247.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 81.5999984741211, + "max-melee": "700", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 21.600000381469727, + "lifepoints": "4950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fenris wolf (Sköll)", + "variants": [] + }, + { + "name": "Ice wolf", + "variants": [ + { + "image": "", + "level": "58", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "880", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "58", + "slayer-exp": 45.400001525878906, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "72", + "defence": "50", + "slayer-level": "1", + "experience": 420, + "susceptible": ["<\/a>"], + "lifepoint-exp": 138.60000610351562, + "max-melee": "1350", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "72", + "slayer-exp": 207.39999389648438, + "lifepoints": "8400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Jungle Wolf", + "variants": [{ + "image": "", + "level": "78", + "defence": "54", + "slayer-level": "1", + "experience": 460, + "susceptible": ["<\/a>"], + "lifepoint-exp": 151.8000030517578, + "max-melee": "1160", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "9200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "White wolf", + "variants": [{ + "image": "", + "level": "12", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12.600000381469727, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Wolf", + "variants": [ + { + "image": "", + "level": "8", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 8 (1)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "8", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 8 (2)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "6", + "slayer-level": "1", + "experience": 77.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 11 (1)", + "slayer-exp": -1, + "lifepoints": "1550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "6", + "slayer-level": "1", + "experience": 77.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 11 (2)", + "slayer-exp": -1, + "lifepoints": "1550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Armoured zombie (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "?", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 841, + "lifepoints": "20000", + "max-ranged": "739", + "max-magic": "739", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "77", + "slayer-level": "?", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "20000", + "max-ranged": "739", + "max-magic": "739", + "max-necromancy": "0" + } + ] + }, + { + "name": "Armoured zombie (Uncharted Isles)", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Docile (Throwing Axes)", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Docile (Sword and Shield)", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Aggressive", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bossy McBossFace", + "variants": [{ + "image": "", + "level": "123", + "defence": "72", + "slayer-level": "0", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dried zombie", + "variants": [ + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Parched", + "slayer-exp": 41, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Unmoisturised", + "slayer-exp": 41, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Dried", + "slayer-exp": 41, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Empowering zombie", + "variants": [] + }, + { + "name": "Summoned Zombie", + "variants": [{ + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 22.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 7.400000095367432, + "max-melee": "36", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8, + "lifepoints": "450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Summoned Zombie (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "0", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "368", + "max-magic": "368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Summoned armoured zombie", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "0", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "10000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ulthven Keith", + "variants": [{ + "image": "", + "level": "117", + "defence": "72", + "slayer-level": "0", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead Witch", + "variants": [ + { + "image": "", + "level": "170", + "defence": "75", + "slayer-level": "0", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "Varies", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": ["<\/a>"], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (Lair of Tarn Razorlor)", + "variants": [ + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": ["<\/a>"], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "72", + "slayer-exp": -1, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "74", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "74 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "74", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "74 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "75 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "75 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "77", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "77 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "77", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "77 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "79", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "79 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "79", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "79 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "82", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "82 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "82", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "82 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "82", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "82 (3)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "84", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "84 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "84", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "84 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "85 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "85 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie (Stronghold of Security)", + "variants": [ + { + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 95, + "susceptible": ["<\/a>"], + "lifepoint-exp": 31.299999237060547, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 12", + "slayer-exp": -1, + "lifepoints": "1900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 21", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (Temple Trekking)", + "variants": [{ + "image": "", + "level": "28", + "defence": "20", + "slayer-level": "?", + "experience": 50, + "susceptible": [], + "lifepoint-exp": 16.5, + "max-melee": "0", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Zombie (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "108", + "defence": "67", + "slayer-level": "0", + "experience": 600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 198, + "max-melee": "384", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 504, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "108", + "defence": "67", + "slayer-level": "0", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "384", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 504, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (Uncharted Isles)", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 236, + "susceptible": [], + "lifepoint-exp": 77.80000305175781, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Male", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 236, + "susceptible": [], + "lifepoint-exp": 77.80000305175781, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Female", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 236, + "susceptible": [], + "lifepoint-exp": 77.80000305175781, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Aggressive", + "slayer-exp": -1, + "lifepoints": "4950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie (Wilderness)", + "variants": [ + { + "image": "", + "level": "22", + "defence": "16", + "slayer-level": "?", + "experience": 40, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13.199999809265137, + "max-melee": "64", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 22 (1)", + "slayer-exp": -1, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "22", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 22 (2)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "22", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 22 (3)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (1)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (2)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (3)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (4)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie (Zogre Flesh Eaters)", + "variants": [{ + "image": "", + "level": "36", + "defence": "26", + "slayer-level": "?", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "156", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "The Ambassador", + "variants": [ + { + "image": "", + "level": "5500", + "defence": "75", + "slayer-level": "?", + "experience": 25000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8250, + "max-melee": "3300", + "weakness": ["<\/a>"], + "max-spec": "9000", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "1000000", + "max-ranged": "2200", + "max-magic": "10000", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5500", + "defence": "75", + "slayer-level": "?", + "experience": 25000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8250, + "max-melee": "330", + "weakness": ["<\/a>"], + "max-spec": "900", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "500000", + "max-ranged": "220", + "max-magic": "1000", + "max-necromancy": "0" + } + ] + }, + { + "name": "Araxxi", + "variants": [{ + "image": "", + "level": "3000", + "defence": "80", + "slayer-level": "-4", + "experience": 2500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 825, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "10700", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "100000", + "max-ranged": "1653", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Elemental", + "variants": [ + { + "image": "", + "level": "305", + "defence": "69", + "slayer-level": "?", + "experience": 862, + "susceptible": ["<\/a>"], + "lifepoint-exp": 284.3999938964844, + "max-melee": "1104", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "F2P", + "slayer-exp": -1, + "lifepoints": "17250", + "max-ranged": "1104", + "max-magic": "1104", + "max-necromancy": "0" + }, + { + "image": "", + "level": "305", + "defence": "69", + "slayer-level": "?", + "experience": 862, + "susceptible": ["<\/a>"], + "lifepoint-exp": 284.3999938964844, + "max-melee": "1104", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "P2P", + "slayer-exp": -1, + "lifepoints": "17250", + "max-ranged": "1104", + "max-magic": "1104", + "max-necromancy": "0" + } + ] + }, + { + "name": "Commander Zilyana", + "variants": [ + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Aftermath", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Battle of the Monolith", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Council of Burthorpe", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Extinction", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Gower Quest", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Missing, Presumed Death", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Once Upon a Time in Gielinor", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Senntisten", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "The World Wakes", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + } + ] + }, + { + "name": "Croesus", + "variants": [ + { + "image": "", + "level": "6000", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Active", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "6000", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dormant", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + } + ] + }, + { + "name": "Corporeal Beast", + "variants": [{ + "image": "", + "level": "785", + "defence": "75", + "slayer-level": "-4", + "experience": 2500, + "susceptible": [], + "lifepoint-exp": 825, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "100000", + "max-ranged": "720", + "max-magic": "720", + "max-necromancy": "0" + }] + }, + { + "name": "General Graardor", + "variants": [ + { + "image": "", + "level": "624", + "defence": "72", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Hard mode", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "624", + "defence": "75", + "slayer-level": "?", + "experience": 2000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 660, + "max-melee": "7000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "40000", + "max-ranged": "1676", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "210", + "defence": "72", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "4800", + "name": "The Mighty Fall", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "210", + "defence": "72", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "The World Wakes", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Giant mole", + "variants": [ + { + "image": "", + "level": "230", + "defence": "45", + "slayer-level": "?", + "experience": 1950, + "susceptible": ["<\/a>"], + "lifepoint-exp": 643.5, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "2800", + "name": "Hard Mode", + "slayer-exp": -1, + "lifepoints": "78000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "230", + "defence": "45", + "slayer-level": "?", + "experience": 1950, + "susceptible": ["<\/a>"], + "lifepoint-exp": 643.5, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "2800", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "78000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Gregorovic", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "2300", + "weakness": ["<\/a>"], + "max-spec": "2300", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "2300", + "max-magic": "1800", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "2300", + "weakness": ["<\/a>"], + "max-spec": "2300", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "2300", + "max-magic": "1800", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "80", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sliske's Endgame", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + } + ] + }, + { + "name": "Har-Aken", + "variants": [ + { + "image": "", + "level": "800", + "defence": "80", + "slayer-level": "?", + "experience": 3750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1237.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Head", + "slayer-exp": -1, + "lifepoints": "150000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }, + { + "image": "", + "level": "800", + "defence": "76", + "slayer-level": "?", + "experience": 350, + "susceptible": ["<\/a>"], + "lifepoint-exp": 115.5, + "max-melee": "820", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Magic Tentacle", + "slayer-exp": -1, + "lifepoints": "7000", + "max-ranged": "1094", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "800", + "defence": "76", + "slayer-level": "?", + "experience": 350, + "susceptible": ["<\/a>"], + "lifepoint-exp": 115.5, + "max-melee": "820", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged Tentacle", + "slayer-exp": -1, + "lifepoints": "7000", + "max-ranged": "1094", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Helwyr", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "6000", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hermod, the Spirit of War", + "variants": [ + { + "image": "", + "level": "732", + "defence": "70", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2250", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "1750" + }, + { + "image": "", + "level": "732", + "defence": "70", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2250", + "name": "Quest", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "1750" + } + ] + }, + { + "name": "Nex", + "variants": [ + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Magic", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Melee", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Ranged", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Standard", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nex: Angel of Death", + "variants": [{ + "image": "", + "level": "7000", + "defence": "99", + "slayer-level": "-4", + "experience": 75000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 24750, + "max-melee": "2123", + "weakness": ["<\/a>"], + "max-spec": "75000", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "3000000", + "max-ranged": "2123", + "max-magic": "2123", + "max-necromancy": "0" + }] + }, + { + "name": "Raksha, the Shadow Colossus", + "variants": [ + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "During fight", + "slayer-exp": -1, + "lifepoints": "800000", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "During fight (duo)", + "slayer-exp": -1, + "lifepoints": "1600000", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Shackled", + "slayer-exp": -1, + "lifepoints": "N/A", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Subdued", + "slayer-exp": -1, + "lifepoints": "N/A", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + } + ] + }, + { + "name": "Rasial, the First Necromancer", + "variants": [ + { + "image": "", + "level": "8462", + "defence": "95", + "slayer-level": "?", + "experience": 20000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6600, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "11500", + "name": "Alpha vs Omega", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "2300" + }, + { + "image": "", + "level": "8462", + "defence": "95", + "slayer-level": "?", + "experience": 18000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 5940, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "11500", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "800000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "2300" + } + ] + }, + { + "name": "Seiryu the Azure Serpent", + "variants": [ + { + "image": "", + "level": "10000", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "7500000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10000", + "defence": "80", + "slayer-level": "?", + "experience": 187500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61875, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "3750000", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Solak", + "variants": [ + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Left arm", + "slayer-exp": -1, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Left leg", + "slayer-exp": -1, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Right arm", + "slayer-exp": -1, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Right leg", + "slayer-exp": -1, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7000", + "defence": "70", + "slayer-level": "?", + "experience": 200000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 66000, + "max-melee": "4000", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Solak", + "slayer-exp": -1, + "lifepoints": "2000000", + "max-ranged": "4000", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7000", + "defence": "60", + "slayer-level": "?", + "experience": 8000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2640, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Withering", + "slayer-exp": -1, + "lifepoints": "125000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Telos, the Warden", + "variants": [ + { + "image": "", + "level": "2000", + "defence": "80", + "slayer-level": "?", + "experience": -2, + "susceptible": [], + "lifepoint-exp": -2, + "max-melee": "N/A", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Dormant", + "slayer-exp": -1, + "lifepoints": "N/A", + "max-ranged": "N/A", + "max-magic": "N/A", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "80", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Phase 5", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "1324", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "80", + "slayer-level": "?", + "experience": 20000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6600, + "max-melee": "1324", + "weakness": ["<\/a>"], + "max-spec": "5555", + "name": "Standard", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "0", + "max-magic": "1324", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nymora, the Vengeful", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 12500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4125, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "250000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "350000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "0" + } + ] + }, + { + "name": "Avaryss, the Unceasing", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 17500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 5775, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "350000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1000", + "defence": "N/A", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "N/A", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Daughter of Chaos", + "slayer-exp": -1, + "lifepoints": "500000", + "max-ranged": "N/A", + "max-magic": "N/A", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 12500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4125, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "7140", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "250000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "?" + } + ] + }, + { + "name": "TzKal-Zuk", + "variants": [ + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1837", + "weakness": ["<\/a>"], + "max-spec": "15000", + "name": "Hard Mode", + "slayer-exp": -1, + "lifepoints": "1200000", + "max-ranged": "1837", + "max-magic": "1837", + "max-necromancy": "0" + }, + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1837", + "weakness": ["<\/a>"], + "max-spec": "15000", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "600000", + "max-ranged": "1837", + "max-magic": "1837", + "max-necromancy": "0" + } + ] + }, + { + "name": "TzTok-Jad", + "variants": [{ + "image": "", + "level": "702", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [], + "lifepoint-exp": 330, + "max-melee": "8000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1309, + "lifepoints": "40000", + "max-ranged": "8000", + "max-magic": "8000", + "max-necromancy": "0" + }] + }, + { + "name": "Vindicta", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "85", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "4500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Hard mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "2500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Vorago", + "variants": [{ + "image": "", + "level": "10000", + "defence": "90", + "slayer-level": "-4", + "experience": 6250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2062.5, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "250000", + "max-ranged": "5000", + "max-magic": "5000", + "max-necromancy": "0" + }] + }, + { + "name": "Zamorak, Lord of Chaos", + "variants": [ + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Hard mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "1819", + "max-magic": "1819", + "max-necromancy": "0" + }, + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "1819", + "max-magic": "1819", + "max-necromancy": "0" + }, + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "150000", + "max-ranged": "1819", + "max-magic": "1819", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zemouregal", + "variants": [ + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Defender of Varrock (1)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Defender of Varrock (2)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat (fort, skeletal)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat (fort)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Nadir", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "The World Wakes", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Missing, Presumed Death", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves (lair)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves (lair, examinable)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves (cutscene)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dimension of Disaster", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Children of Mah", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Children of Mah (examinable)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Children of Mah (Freneskae cutscene)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "TzekHaar Front", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Daughter of Chaos", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Succession", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Succession (skeletal)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Unwelcome Guests", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dead and Buried", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ancient Awakening", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Battle of Forinthry", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Requiem for a Dragon", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + } + ] + } +] diff --git a/dist/data/old/masters.json b/dist/data/old/masters.json new file mode 100644 index 0000000..cdca203 --- /dev/null +++ b/dist/data/old/masters.json @@ -0,0 +1,496 @@ +[ + { + "task-counts": { + "Gelatinous abominations": "10-20", + "Trolls": "10-20", + "Wolves": "10-20", + "Cave bugs": "10-20", + "Cows": "10-25", + "Birds": "10-20", + "Crawling hands": "10-20" + }, + "name": "Turael", + "id": 1, + "url": "https://runescape.wiki/w/Turael" + }, + { + "task-counts": { + "Frogs": "15-30", + "Goblins": "15-30", + "Bats": "15-30", + "Ghosts": "15-25", + "Skeletons": "15-25", + "Spiders": "15-25", + "Zombies": "15-30", + "Cave slimes": "10-25", + "Cave bugs": "15-30", + "Cows": "15-30", + "Rats": "15-30", + "Birds": "15-30" + }, + "name": "Jacquelyn", + "id": 2, + "url": "https://runescape.wiki/w/Jacquelyn" + }, + { + "task-counts": { + "Frogs": "40-60", + "Bats": "40-60", + "Hill giants": "40-60", + "Wall beasts": "10-20", + "Zombies": "40-60", + "Cave slimes": "40-60", + "Mogres": "40-60", + "Moss giants": "40-60", + "Hobgoblins": "40-60", + "Bears": "20-40", + "Ice warriors": "40-60", + "Ghosts": "40-70", + "Skeletons": "40-60", + "Icefiends": "40-60", + "Minotaurs": "40-60", + "Scorpions": "40-60", + "Spiders": "40-60", + "Wolves": "40-60", + "Grotworms": "40-60", + "Kalphite": "40-60", + "Catablepon": "40-60", + "Fleshcrawlers": "40-60", + "Ice giants": "40-60", + "Cockroaches": "40-60" + }, + "name": "Vannaka", + "id": 3, + "url": "https://runescape.wiki/w/Vannaka" + }, + { + "task-counts": { + "Demons": "45-90", + "Aviansies": "50-110", + "Lesser demons": "120-180", + "Abyssal Demons": "140-260", + "Skeletons": "95-125", + "Undead": "130-170", + "Black demons": "110-160", + "Dark beasts": "120-180", + "Dragons": "60-90", + "Grotworms": "140-190", + "Zemouregal's undead": "110-150", + "Hellhounds": "70-110", + "Living wyverns": "40-65", + "Fire giants": "110-160", + "Ankou": "80-120", + "Dagannoth": "190-250", + "Zombies": "100-140", + "Fetid zombies": "140-170", + "Armoured phantoms": "45-55", + "Ghosts": "160-180", + "Green dragons": "70-120", + "Acheron mammoths": "20-45", + "Risen ghosts": "90-120", + "Aberrant spectres": "50-80", + "Kalphite": "65-110", + "Black dragons": "70-120", + "Camel warriors": "30-55", + "Greater demons": "140-200", + "Bound skeletons": "120-140", + "Ripper demons": "40-65" + }, + "name": "The Raptor", + "id": 4, + "url": "https://runescape.wiki/w/The_Raptor" + }, + { + "task-counts": { + "Desert lizards": "50-90", + "Werewolves": "50-90", + "Killerwatts": "60-100", + "Lesser demons": "60-100", + "Moss giants": "50-90", + "Banshees": "50-90", + "Ice warriors": "40-60", + "Shades": "60-100", + "Cockatrice": "50-90", + "Earth warriors": "35-55", + "Grotworms": "60-100", + "Jellies": "60-100", + "Otherworldly beings": "60-100", + "Bloodveld": "60-100", + "Cyclopes": "50-90", + "Basilisks": "60-100", + "Shadow warriors": "60-100", + "Brine rats": "60-100", + "Ice giants": "50-90", + "Cave crawlers": "50-90", + "Jungle horrors": "60-100", + "Ogres": "60-100", + "Ankou": "60-100", + "Sea snakes": "60-100", + "Infernal mages": "60-100", + "Turoth": "60-100", + "Crocodiles": "50-90", + "Green dragons": "35-55", + "Vampyres": "50-90", + "Aberrant spectres": "60-100", + "Dogs": "50-90", + "Molanisks": "50-90", + "Rockslugs": "50-90", + "Ghouls": "60-100", + "Pyrefiends": "60-100" + }, + "name": "Mazchna", + "id": 5, + "url": "https://runescape.wiki/w/Mazchna" + }, + { + "task-counts": { + "Warped tortoises": "110-170", + "Dust devils": "110-170", + "Elves": "60-90", + "Cave horrors": "110-170", + "Lesser demons": "110-170", + "Crawling hands": "110-170", + "Gargoyles": "110-170", + "Banshees": "110-170", + "Grifolaroos": "50-65", + "Jungle strykewyrms": "80-110", + "Trolls": "110-170", + "Grotworms": "70-110", + "Jellies": "110-170", + "Bloodveld": "110-170", + "Basilisks": "110-170", + "Shadow warriors": "110-170", + "Harpie bug swarms": "110-170", + "Brine rats": "110-170", + "Fever spiders": "110-170", + "Cave crawlers": "110-170", + "Fire giants": "110-170", + "Jungle horrors": "110-170", + "Grifolapines": "50-65", + "Mutated zygomites": "30-60", + "Dagannoth": "110-170", + "Blue dragons": "110-170", + "Infernal mages": "110-170", + "Bronze dragons": "30-60", + "Turoth": "110-170", + "Kurask": "110-170", + "Aberrant spectres": "110-170", + "Kalphite": "110-170", + "Fungal magi": "80-105", + "Vyrewatch": "80-110" + }, + "name": "Chaeldar", + "id": 6, + "url": "https://runescape.wiki/w/Chaeldar" + }, + { + "task-counts": { + "Desert lizards": "150-250", + "Warped tortoises": "120-185", + "Dust devils": "120-185", + "Elves": "60-90", + "Cave horrors": "120-185", + "Spiritual warriors": "120-185", + "Aviansies": "50-100", + "Gargoyles": "120-195", + "Banshees": "120-185", + "Grifolaroos": "55-75", + "Red dragons": "30-60", + "Spiritual mages": "120-185", + "Jungle strykewyrms": "90-120", + "Abyssal Demons": "120-185", + "Trolls": "120-185", + "Scorpions": "150-250", + "Nechryael": "120-185", + "Black demons": "120-185", + "Grotworms": "70-120", + "Bloodveld": "120-185", + "Cres's creations": "65-80", + "Basilisks": "120-185", + "Cave crawlers": "120-185", + "Hellhounds": "120-185", + "Fire giants": "120-185", + "Grifolapines": "55-75", + "Scabarites": "30-60", + "Mutated jadinkos": "80-130", + "Dagannoth": "120-185", + "Blue dragons": "120-185", + "Aquanites": "120-185", + "Iron dragons": "30-60", + "Corrupted creatures": "175-300", + "Turoth": "120-185", + "Crocodiles": "150-250", + "Kurask": "120-185", + "Desert strykewyrms": "90-110", + "Soul devourers": "175-300", + "Terror dogs": "30-60", + "Aberrant spectres": "120-185", + "Kalphite": "120-185", + "Fungal magi": "90-110", + "Greater demons": "120-185", + "Vyrewatch": "90-120" + }, + "name": "Sumona", + "id": 7, + "url": "https://runescape.wiki/w/Sumona" + }, + { + "task-counts": { + "Dust devils": "130-200", + "Waterfiends": "130-200", + "Aviansies": "100-125", + "Celestial dragons": "125-150", + "Ganodermic creatures": "55-70", + "Gargoyles": "130-200", + "Grifolaroos": "60-85", + "Airut": "125-150", + "Spiritual mages": "130-200", + "Jungle strykewyrms": "90-120", + "Abyssal Demons": "130-200", + "Nechryael": "130-200", + "Black demons": "130-200", + "Dark beasts": "130-200", + "Grotworms": "80-120", + "Bloodveld": "130-200", + "Cres's creations": "65-80", + "Skeletal wyverns": "40-80", + "Suqahs": "40-80", + "Hellhounds": "130-200", + "Fire giants": "130-200", + "Grifolapines": "60-85", + "Scabarites": "40-80", + "Mutated jadinkos": "120-200", + "Dagannoth": "130-200", + "Goraks": "40-80", + "Aquanites": "130-200", + "Iron dragons": "40-80", + "Desert strykewyrms": "90-140", + "Ascension members": "100-125", + "Aberrant spectres": "130-200", + "Kalphite": "130-200", + "Black dragons": "40-80", + "Warped terrorbirds": "130-200", + "Steel dragons": "40-80", + "Edimmu": "130-200", + "Fungal magi": "100-200", + "Greater demons": "130-200", + "Ice strykewyrms": "100-200", + "Mithril dragons": "4-8", + "Vyrewatch": "90-120" + }, + "name": "Duradel", + "id": 8, + "url": "https://runescape.wiki/w/Duradel" + }, + { + "task-counts": { + "Chaos giants": "60-100", + "TzHaar": "80-110", + "Warped tortoises": "150-240", + "Elves": "120-150", + "Glacors": "50-70", + "Waterfiends": "170-250", + "Adamant dragons": "40-50", + "Aviansies": "125-150", + "Kal'gerion demons": "50-100", + "Muspah": "125-150", + "Grifolaroos": "65-80", + "Airut": "125-150", + "Spiritual mages": "150-240", + "Stalker creatures": "120-170", + "Nechryael": "140-220", + "Black demons": "190-250", + "Cres's creations": "65-80", + "Skeletal wyverns": "40-90", + "Gemstone dragons": "60-100", + "Hellhounds": "130-220", + "Lava strykewyrms": "50-100", + "Living wyverns": "30-55", + "Fire giants": "170-250", + "Mutated jadinkos": "160-220", + "Nihil": "40-90", + "Corrupted creatures": "150-250", + "Terror dogs": "60-70", + "Ascension members": "100-125", + "Camel warriors": "25-45", + "Greater demons": "150-250", + "Ice strykewyrms": "100-200", + "Vyrewatch": "90-130", + "Dust devils": "150-250", + "Tormented demons": "40-60", + "Celestial dragons": "125-150", + "Ganodermic creatures": "70-90", + "Gargoyles": "150-250", + "Jungle strykewyrms": "90-130", + "Abyssal Demons": "150-250", + "Living rock creatures": "120-170", + "Dark beasts": "150-250", + "Grotworms": "80-150", + "Bloodveld": "180-250", + "Suqahs": "50-100", + "Grifolapines": "65-80", + "Nightmare creatures": "100-120", + "Dagannoth": "170-240", + "Blue dragons": "120-200", + "Aquanites": "160-200", + "Iron dragons": "60-110", + "Desert strykewyrms": "90-160", + "Soul devourers": "150-250", + "Acheron mammoths": "20-45", + "Aberrant spectres": "150-250", + "Kalphite": "170-250", + "Black dragons": "40-90", + "Steel dragons": "40-100", + "Edimmu": "150-250", + "Ripper demons": "50-75", + "Mithril dragons": "30-35" + }, + "name": "Kuradal", + "id": 9, + "url": "https://runescape.wiki/w/Kuradal" + }, + { + "task-counts": { + "Chaos giants": "80-120", + "TzHaar": "95-130", + "Elves": "150-180", + "Glacors": "60-85", + "Nodon dragonkin": "90-130", + "Waterfiends": "205-300", + "Adamant dragons": "40-60", + "Aviansies": "150-180", + "Kal'gerion demons": "60-120", + "Muspah": "150-180", + "Crystal shapeshifters": "110-150", + "Airut": "150-180", + "Stalker creatures": "140-190", + "Nechryael": "170-265", + "Black demons": "230-300", + "Cres's creations": "80-100", + "Gemstone dragons": "80-130", + "Lava strykewyrms": "60-120", + "Living wyverns": "40-65", + "Mutated jadinkos": "195-265", + "Nihil": "50-110", + "Corrupted creatures": "150-250", + "Ascension members": "120-150", + "Camel warriors": "35-55", + "Greater demons": "180-300", + "Ice strykewyrms": "120-240", + "Vyrewatch": "110-155", + "Tormented demons": "50-75", + "Celestial dragons": "150-180", + "Ganodermic creatures": "85-110", + "Gargoyles": "180-300", + "Abyssal Demons": "180-300", + "Dark beasts": "180-300", + "Grotworms": "100-180", + "Creatures of the Lost Grove": "100-120", + "Nightmare creatures": "110-160", + "Dagannoth": "205-290", + "Rune dragons": "50-75", + "Aquanites": "195-240", + "Iron dragons": "75-130", + "Shadow creatures": "100-150", + "Desert strykewyrms": "110-190", + "Soul devourers": "150-250", + "Acheron mammoths": "30-55", + "Kalphite": "205-300", + "Black dragons": "50-110", + "Steel dragons": "50-125", + "Edimmu": "170-265", + "Ripper demons": "60-85", + "Mithril dragons": "30-50" + }, + "name": "Morvran", + "id": 10, + "url": "https://runescape.wiki/w/Morvran" + }, + { + "task-counts": { + "Chaos giants": "80-120", + "Elves": "150-180", + "Glacors": "60-85", + "Nodon dragonkin": "110-150", + "Adamant dragons": "40-60", + "Aviansies": "150-180", + "Kal'gerion demons": "60-120", + "Muspah": "150-180", + "Crystal shapeshifters": "110-150", + "Airut": "150-180", + "Stalker creatures": "140-190", + "Black demons": "230-300", + "Dragons": "101-150", + "Cres's creations": "80-100", + "Gemstone dragons": "80-130", + "Lava strykewyrms": "60-120", + "Living wyverns": "40-65", + "Mutated jadinkos": "195-265", + "Nihil": "50-110", + "Corrupted creatures": "150-250", + "Armoured phantoms": "55-65", + "Vile blooms": "70-110", + "Ascension members": "120-150", + "Camel warriors": "35-55", + "Greater demons": "180-300", + "Ice strykewyrms": "120-240", + "Vyrewatch": "110-155", + "Demons": "101-150", + "Tormented demons": "50-75", + "Celestial dragons": "150-180", + "Ganodermic creatures": "85-110", + "Gargoyles": "180-300", + "Abyssal Demons": "180-300", + "Undead": "120-160", + "Dark beasts": "180-300", + "Creatures of the Lost Grove": "100-120", + "Dinosaurs": "70-110", + "Nightmare creatures": "110-162", + "Dagannoth": "205-290", + "Rune dragons": "50-75", + "Aquanites": "195-240", + "Iron dragons": "75-130", + "Shadow creatures": "100-150", + "Soul devourers": "150-250", + "Acheron mammoths": "30-55", + "Risen ghosts": "120-160", + "Creatures of Daemonheim": "101-150", + "Kalphite": "205-300", + "Black dragons": "50-110", + "Steel dragons": "50-125", + "Strykewyrms": "101-150", + "Edimmu": "170-265", + "Ripper demons": "60-85", + "Mithril dragons": "30-50" + }, + "name": "Laniakea", + "id": 11, + "url": "https://runescape.wiki/w/Laniakea" + }, + { + "task-counts": { + "Soulgazers": "140-190", + "Glacors": "70-100", + "Abyssal beasts": "140-200", + "Kal'gerion demons": "60-120", + "Gargoyles": "180-300", + "Greater demon berserkers and ash lords": "50-80", + "Hydrix dragons": "90-140", + "Revenants": "50-80", + "Abyssal Demons": "180-300", + "Abyssal lords": "100-150", + "Abyssal savages": "180-250", + "Acheron mammoths": "40-60", + "Black demons": "200-280", + "Dark beasts": "180-300", + "Onyx dragons": "100-150", + "Ripper demons": "70-95", + "Ice strykewyrms": "100-150", + "Lava strykewyrms": "60-120", + "Living wyverns": "50-75" + }, + "name": "Mandrith", + "id": 12, + "url": "https://runescape.wiki/w/Mandrith" + } +] diff --git a/dist/data/reapers.json b/dist/data/reapers.json new file mode 100644 index 0000000..fb989d1 --- /dev/null +++ b/dist/data/reapers.json @@ -0,0 +1,490 @@ +[ + { + "default-creature": "Araxxi#Default", + "weakness": [], + "creatures": ["Araxxi"], + "hidden-creatures": [], + "index": "Araxxi", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Arch-Glacor#Normal mode", + "weakness": [], + "creatures": ["Arch-Glacor"], + "hidden-creatures": [], + "index": "Arch-Glacor", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Black stone dragon#Default", + "weakness": [], + "creatures": ["Black stone dragon"], + "hidden-creatures": [], + "index": "Black stone dragon", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Chaos Elemental#P2P", + "weakness": [], + "creatures": ["Chaos Elemental"], + "hidden-creatures": [], + "index": "Chaos Elemental", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "weakness": [], + "creatures": ["Commander Zilyana"], + "hidden-creatures": [], + "index": "Commander Zilyana", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Corporeal Beast#Default", + "weakness": [], + "creatures": ["Corporeal Beast"], + "hidden-creatures": [], + "index": "Corporeal Beast", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Croesus#Active", + "weakness": [], + "creatures": ["Croesus"], + "hidden-creatures": [], + "index": "Croesus", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Dagannoth Rex#Default", + "weakness": [], + "creatures": [ + "Dagannoth Prime", + "Dagannoth Rex", + "Dagannoth Supreme" + ], + "hidden-creatures": [], + "index": "Dagannoth Kings", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "General Graardor#Normal", + "weakness": [], + "creatures": ["General Graardor"], + "hidden-creatures": [], + "index": "General Graardor", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Giant mole#Normal", + "weakness": [], + "creatures": ["Giant mole"], + "hidden-creatures": [], + "index": "Giant mole", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Gregorovic#Normal Mode", + "weakness": [], + "creatures": ["Gregorovic"], + "hidden-creatures": [], + "index": "Gregorovic", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Har-Aken#Head", + "weakness": [], + "creatures": ["Har-Aken"], + "hidden-creatures": [], + "index": "Har-Aken", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Helwyr#Normal Mode", + "weakness": [], + "creatures": ["Helwyr"], + "hidden-creatures": [], + "index": "Helwyr", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Hermod, the Spirit of War#Normal", + "weakness": [], + "creatures": ["Hermod, the Spirit of War"], + "hidden-creatures": [], + "index": "Hermod, the Spirit of War", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "K'ril Tsutsaroth#Normal", + "weakness": [], + "creatures": ["K'ril Tsutsaroth"], + "hidden-creatures": [], + "index": "K'ril Tsutsaroth", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kalphite King#Magic", + "weakness": [], + "creatures": ["Kalphite King"], + "hidden-creatures": [], + "index": "Kalphite King", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kalphite Queen#First form", + "weakness": [], + "creatures": ["Kalphite Queen"], + "hidden-creatures": [], + "index": "Kalphite Queen", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kerapac, the bound#Normal mode", + "weakness": [], + "creatures": ["Kerapac, the bound"], + "hidden-creatures": [], + "index": "Kerapac, the bound", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "King Black Dragon#Default", + "weakness": [], + "creatures": ["King Black Dragon"], + "hidden-creatures": [], + "index": "King Black Dragon", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kree'arra#Normal", + "weakness": [], + "creatures": ["Kree'arra"], + "hidden-creatures": [], + "index": "Kree'arra", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Legio Primus#Default", + "weakness": [], + "creatures": [ + "Legio Primus", + "Legio Quartus", + "Legio Quintus", + "Legio Secundus", + "Legio Sextus", + "Legio Tertius" + ], + "hidden-creatures": [], + "index": "Legiones", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Nex#Standard", + "weakness": [], + "creatures": ["Nex"], + "hidden-creatures": [], + "index": "Nex", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Nex: Angel of Death#Default", + "weakness": [], + "creatures": ["Nex: Angel of Death"], + "hidden-creatures": [], + "index": "Nex: Angel of Death", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Queen Black Dragon#Normal", + "weakness": [], + "creatures": ["Queen Black Dragon"], + "hidden-creatures": [], + "index": "Queen Black Dragon", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Raksha, the Shadow Colossus#During fight", + "weakness": [], + "creatures": ["Raksha, the Shadow Colossus"], + "hidden-creatures": [], + "index": "Raksha, the Shadow Colossus", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Rasial, the First Necromancer#Normal", + "weakness": [], + "creatures": ["Rasial, the First Necromancer"], + "hidden-creatures": [], + "index": "Rasial, the First Necromancer", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Orikalka#Default", + "weakness": [], + "creatures": [ + "Orikalka", + "Osseous", + "Pthentraken", + "Rathis" + ], + "hidden-creatures": [], + "index": "Rex Matriarchs", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Seiryu the Azure Serpent#Normal mode", + "weakness": [], + "creatures": ["Seiryu the Azure Serpent"], + "hidden-creatures": [], + "index": "Seiryu the Azure Serpent", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Solak#Solak", + "weakness": [], + "creatures": ["Solak"], + "hidden-creatures": [], + "index": "Solak", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Telos, the Warden#Standard", + "weakness": [], + "creatures": ["Telos, the Warden"], + "hidden-creatures": [], + "index": "Telos, the Warden", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "The Ambassador#Normal mode", + "weakness": [], + "creatures": ["The Ambassador"], + "hidden-creatures": [], + "index": "The Ambassador", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Dharok the Wretched#Normal", + "weakness": [], + "creatures": [ + "Ahrim the Blighted", + "Akrisae the Doomed", + "Dharok the Wretched", + "Guthan the Infested", + "Karil the Tainted", + "Linza the Disgraced", + "Torag the Corrupted", + "Verac the Defiled" + ], + "hidden-creatures": [], + "index": "The Barrows Brothers", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Dharok the Wretched#Normal", + "weakness": [], + "creatures": [ + "Ahrim the Blighted", + "Dharok the Wretched", + "Guthan the Infested", + "Karil the Tainted", + "Torag the Corrupted", + "Verac the Defiled" + ], + "hidden-creatures": [], + "index": "The Barrows: Rise of the Six", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "The Magister#Default", + "weakness": [], + "creatures": ["The Magister"], + "hidden-creatures": [], + "index": "The Magister", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Avaryss, the Unceasing#Normal Mode", + "weakness": [], + "creatures": [ + "Avaryss, the Unceasing", + "Nymora, the Vengeful" + ], + "hidden-creatures": [], + "index": "Twin Furies", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "TzKal-Zuk#Normal Mode", + "weakness": [], + "creatures": ["TzKal-Zuk"], + "hidden-creatures": [], + "index": "TzKal-Zuk", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "TzTok-Jad#Default", + "weakness": [], + "creatures": ["TzTok-Jad"], + "hidden-creatures": [], + "index": "TzTok-Jad", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Vindicta#Normal mode", + "weakness": [], + "creatures": ["Vindicta"], + "hidden-creatures": [], + "index": "Vindicta", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Vorago#Default", + "weakness": [], + "creatures": ["Vorago"], + "hidden-creatures": [], + "index": "Vorago", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Zamorak, Lord of Chaos#Normal mode", + "weakness": [], + "creatures": ["Zamorak, Lord of Chaos"], + "hidden-creatures": [], + "index": "Zamorak, Lord of Chaos", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Vorkath#Normal mode", + "weakness": [], + "creatures": [ + "Vorkath", + "Zemouregal" + ], + "hidden-creatures": [], + "index": "Zemouregal & Vorkath", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + } +] diff --git a/dist/data/version.json b/dist/data/version.json new file mode 100644 index 0000000..fe1c0c8 --- /dev/null +++ b/dist/data/version.json @@ -0,0 +1,3 @@ +{ + "version": "0.0.17" +} \ No newline at end of file diff --git a/dist/images/creatures/Aberrant spectre#Pollnivneach Slayer Dungeon.png b/dist/images/creatures/Aberrant spectre#Pollnivneach Slayer Dungeon.png new file mode 100644 index 0000000..7ea515e Binary files /dev/null and b/dist/images/creatures/Aberrant spectre#Pollnivneach Slayer Dungeon.png differ diff --git a/dist/images/creatures/Aberrant spectre#Slayer Tower.png b/dist/images/creatures/Aberrant spectre#Slayer Tower.png new file mode 100644 index 0000000..7ea515e Binary files /dev/null and b/dist/images/creatures/Aberrant spectre#Slayer Tower.png differ diff --git a/dist/images/creatures/Abyssal beast#Default.png b/dist/images/creatures/Abyssal beast#Default.png new file mode 100644 index 0000000..1843475 Binary files /dev/null and b/dist/images/creatures/Abyssal beast#Default.png differ diff --git a/dist/images/creatures/Abyssal demon (elite)#Default.png b/dist/images/creatures/Abyssal demon (elite)#Default.png new file mode 100644 index 0000000..ac4c194 Binary files /dev/null and b/dist/images/creatures/Abyssal demon (elite)#Default.png differ diff --git a/dist/images/creatures/Abyssal demon#Default.png b/dist/images/creatures/Abyssal demon#Default.png new file mode 100644 index 0000000..19943b9 Binary files /dev/null and b/dist/images/creatures/Abyssal demon#Default.png differ diff --git a/dist/images/creatures/Abyssal lord#Default.png b/dist/images/creatures/Abyssal lord#Default.png new file mode 100644 index 0000000..005bc51 Binary files /dev/null and b/dist/images/creatures/Abyssal lord#Default.png differ diff --git a/dist/images/creatures/Abyssal savage#Asylum.png b/dist/images/creatures/Abyssal savage#Asylum.png new file mode 100644 index 0000000..ba5ddf7 Binary files /dev/null and b/dist/images/creatures/Abyssal savage#Asylum.png differ diff --git a/dist/images/creatures/Abyssal savage#Wilderness.png b/dist/images/creatures/Abyssal savage#Wilderness.png new file mode 100644 index 0000000..ba5ddf7 Binary files /dev/null and b/dist/images/creatures/Abyssal savage#Wilderness.png differ diff --git a/dist/images/creatures/Acheron mammoth#Default.png b/dist/images/creatures/Acheron mammoth#Default.png new file mode 100644 index 0000000..1627245 Binary files /dev/null and b/dist/images/creatures/Acheron mammoth#Default.png differ diff --git a/dist/images/creatures/Adamant dragon#Default.png b/dist/images/creatures/Adamant dragon#Default.png new file mode 100644 index 0000000..0843b76 Binary files /dev/null and b/dist/images/creatures/Adamant dragon#Default.png differ diff --git a/dist/images/creatures/Adolescent White wolf#Default.png b/dist/images/creatures/Adolescent White wolf#Default.png new file mode 100644 index 0000000..f4c6da2 Binary files /dev/null and b/dist/images/creatures/Adolescent White wolf#Default.png differ diff --git a/dist/images/creatures/Ahrim the Blighted#Normal.png b/dist/images/creatures/Ahrim the Blighted#Normal.png new file mode 100644 index 0000000..14d2ad1 Binary files /dev/null and b/dist/images/creatures/Ahrim the Blighted#Normal.png differ diff --git a/dist/images/creatures/Ahrim the Blighted#Rise of the Six.png b/dist/images/creatures/Ahrim the Blighted#Rise of the Six.png new file mode 100644 index 0000000..9aaa6ee Binary files /dev/null and b/dist/images/creatures/Ahrim the Blighted#Rise of the Six.png differ diff --git a/dist/images/creatures/Ahrim the Blighted#Ritual of the Mahjarrat.png b/dist/images/creatures/Ahrim the Blighted#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..14d2ad1 Binary files /dev/null and b/dist/images/creatures/Ahrim the Blighted#Ritual of the Mahjarrat.png differ diff --git a/dist/images/creatures/Airut#Melee.png b/dist/images/creatures/Airut#Melee.png new file mode 100644 index 0000000..80d58da Binary files /dev/null and b/dist/images/creatures/Airut#Melee.png differ diff --git a/dist/images/creatures/Airut#Ranged.png b/dist/images/creatures/Airut#Ranged.png new file mode 100644 index 0000000..fdb8d1c Binary files /dev/null and b/dist/images/creatures/Airut#Ranged.png differ diff --git a/dist/images/creatures/Akrisae the Doomed#Barrows.png b/dist/images/creatures/Akrisae the Doomed#Barrows.png new file mode 100644 index 0000000..bb00315 Binary files /dev/null and b/dist/images/creatures/Akrisae the Doomed#Barrows.png differ diff --git a/dist/images/creatures/Akrisae the Doomed#Gregorovic.png b/dist/images/creatures/Akrisae the Doomed#Gregorovic.png new file mode 100644 index 0000000..bb00315 Binary files /dev/null and b/dist/images/creatures/Akrisae the Doomed#Gregorovic.png differ diff --git a/dist/images/creatures/Akrisae the Doomed#Sliske's Endgame.png b/dist/images/creatures/Akrisae the Doomed#Sliske's Endgame.png new file mode 100644 index 0000000..bb00315 Binary files /dev/null and b/dist/images/creatures/Akrisae the Doomed#Sliske's Endgame.png differ diff --git a/dist/images/creatures/Alanogard the Black#Default.png b/dist/images/creatures/Alanogard the Black#Default.png new file mode 100644 index 0000000..eee7442 Binary files /dev/null and b/dist/images/creatures/Alanogard the Black#Default.png differ diff --git a/dist/images/creatures/Albino bat#Default.png b/dist/images/creatures/Albino bat#Default.png new file mode 100644 index 0000000..8a25f39 Binary files /dev/null and b/dist/images/creatures/Albino bat#Default.png differ diff --git a/dist/images/creatures/Angry bear#A Soul's Bane.png b/dist/images/creatures/Angry bear#A Soul's Bane.png new file mode 100644 index 0000000..a2d443f Binary files /dev/null and b/dist/images/creatures/Angry bear#A Soul's Bane.png differ diff --git a/dist/images/creatures/Angry bear#Post-quest.png b/dist/images/creatures/Angry bear#Post-quest.png new file mode 100644 index 0000000..c88e9bf Binary files /dev/null and b/dist/images/creatures/Angry bear#Post-quest.png differ diff --git a/dist/images/creatures/Angry giant rat#A Soul's Bane.png b/dist/images/creatures/Angry giant rat#A Soul's Bane.png new file mode 100644 index 0000000..3bc9d38 Binary files /dev/null and b/dist/images/creatures/Angry giant rat#A Soul's Bane.png differ diff --git a/dist/images/creatures/Angry giant rat#Post-quest (1).png b/dist/images/creatures/Angry giant rat#Post-quest (1).png new file mode 100644 index 0000000..841acf8 Binary files /dev/null and b/dist/images/creatures/Angry giant rat#Post-quest (1).png differ diff --git a/dist/images/creatures/Angry giant rat#Post-quest (2).png b/dist/images/creatures/Angry giant rat#Post-quest (2).png new file mode 100644 index 0000000..a97e17a Binary files /dev/null and b/dist/images/creatures/Angry giant rat#Post-quest (2).png differ diff --git a/dist/images/creatures/Angry goblin#A Soul's Bane.png b/dist/images/creatures/Angry goblin#A Soul's Bane.png new file mode 100644 index 0000000..5ad15d0 Binary files /dev/null and b/dist/images/creatures/Angry goblin#A Soul's Bane.png differ diff --git a/dist/images/creatures/Angry goblin#Post-quest.png b/dist/images/creatures/Angry goblin#Post-quest.png new file mode 100644 index 0000000..5ad15d0 Binary files /dev/null and b/dist/images/creatures/Angry goblin#Post-quest.png differ diff --git a/dist/images/creatures/Angry vampyre#Default.png b/dist/images/creatures/Angry vampyre#Default.png new file mode 100644 index 0000000..7d6aca8 Binary files /dev/null and b/dist/images/creatures/Angry vampyre#Default.png differ diff --git a/dist/images/creatures/Animated spade#Default.png b/dist/images/creatures/Animated spade#Default.png new file mode 100644 index 0000000..e99067a Binary files /dev/null and b/dist/images/creatures/Animated spade#Default.png differ diff --git a/dist/images/creatures/Ankou (Kili's Knowledge IV)#Default.png b/dist/images/creatures/Ankou (Kili's Knowledge IV)#Default.png new file mode 100644 index 0000000..e2d5dde Binary files /dev/null and b/dist/images/creatures/Ankou (Kili's Knowledge IV)#Default.png differ diff --git a/dist/images/creatures/Ankou (elite)#Default.png b/dist/images/creatures/Ankou (elite)#Default.png new file mode 100644 index 0000000..20ed735 Binary files /dev/null and b/dist/images/creatures/Ankou (elite)#Default.png differ diff --git a/dist/images/creatures/Ankou#Default.png b/dist/images/creatures/Ankou#Default.png new file mode 100644 index 0000000..20ed735 Binary files /dev/null and b/dist/images/creatures/Ankou#Default.png differ diff --git a/dist/images/creatures/Aquanite (elite)#Default.png b/dist/images/creatures/Aquanite (elite)#Default.png new file mode 100644 index 0000000..0136bcf Binary files /dev/null and b/dist/images/creatures/Aquanite (elite)#Default.png differ diff --git a/dist/images/creatures/Aquanite#Default.png b/dist/images/creatures/Aquanite#Default.png new file mode 100644 index 0000000..0136bcf Binary files /dev/null and b/dist/images/creatures/Aquanite#Default.png differ diff --git a/dist/images/creatures/Araxxi#Default.png b/dist/images/creatures/Araxxi#Default.png new file mode 100644 index 0000000..7ba7790 Binary files /dev/null and b/dist/images/creatures/Araxxi#Default.png differ diff --git a/dist/images/creatures/Arch-Glacor#Hard mode.png b/dist/images/creatures/Arch-Glacor#Hard mode.png new file mode 100644 index 0000000..e7b9288 Binary files /dev/null and b/dist/images/creatures/Arch-Glacor#Hard mode.png differ diff --git a/dist/images/creatures/Arch-Glacor#Normal mode.png b/dist/images/creatures/Arch-Glacor#Normal mode.png new file mode 100644 index 0000000..e7b9288 Binary files /dev/null and b/dist/images/creatures/Arch-Glacor#Normal mode.png differ diff --git a/dist/images/creatures/Armoured phantom#1.png b/dist/images/creatures/Armoured phantom#1.png new file mode 100644 index 0000000..7ff8e4c Binary files /dev/null and b/dist/images/creatures/Armoured phantom#1.png differ diff --git a/dist/images/creatures/Armoured phantom#2.png b/dist/images/creatures/Armoured phantom#2.png new file mode 100644 index 0000000..42fd163 Binary files /dev/null and b/dist/images/creatures/Armoured phantom#2.png differ diff --git a/dist/images/creatures/Armoured phantom#3.png b/dist/images/creatures/Armoured phantom#3.png new file mode 100644 index 0000000..d5fa778 Binary files /dev/null and b/dist/images/creatures/Armoured phantom#3.png differ diff --git a/dist/images/creatures/Armoured zombie (The Shadow Reef)#Normal mode.png b/dist/images/creatures/Armoured zombie (The Shadow Reef)#Normal mode.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/dist/images/creatures/Armoured zombie (The Shadow Reef)#Normal mode.png differ diff --git a/dist/images/creatures/Armoured zombie (The Shadow Reef)#Story mode.png b/dist/images/creatures/Armoured zombie (The Shadow Reef)#Story mode.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/dist/images/creatures/Armoured zombie (The Shadow Reef)#Story mode.png differ diff --git a/dist/images/creatures/Armoured zombie (Uncharted Isles)#Aggressive.png b/dist/images/creatures/Armoured zombie (Uncharted Isles)#Aggressive.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie (Uncharted Isles)#Aggressive.png differ diff --git a/dist/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Sword and Shield).png b/dist/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Sword and Shield).png new file mode 100644 index 0000000..b7ba172 Binary files /dev/null and b/dist/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Sword and Shield).png differ diff --git a/dist/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Throwing Axes).png b/dist/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Throwing Axes).png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Throwing Axes).png differ diff --git a/dist/images/creatures/Armoured zombie#Dimension of Disaster.png b/dist/images/creatures/Armoured zombie#Dimension of Disaster.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/dist/images/creatures/Armoured zombie#Dimension of Disaster.png differ diff --git a/dist/images/creatures/Armoured zombie#Dishonour among Thieves.png b/dist/images/creatures/Armoured zombie#Dishonour among Thieves.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie#Dishonour among Thieves.png differ diff --git a/dist/images/creatures/Armoured zombie#Melee.png b/dist/images/creatures/Armoured zombie#Melee.png new file mode 100644 index 0000000..b7ba172 Binary files /dev/null and b/dist/images/creatures/Armoured zombie#Melee.png differ diff --git a/dist/images/creatures/Armoured zombie#New Foundations.png b/dist/images/creatures/Armoured zombie#New Foundations.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie#New Foundations.png differ diff --git a/dist/images/creatures/Armoured zombie#One of a Kind.png b/dist/images/creatures/Armoured zombie#One of a Kind.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie#One of a Kind.png differ diff --git a/dist/images/creatures/Armoured zombie#Ranged.png b/dist/images/creatures/Armoured zombie#Ranged.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie#Ranged.png differ diff --git a/dist/images/creatures/Armoured zombie#Ritual of the Mahjarrat.png b/dist/images/creatures/Armoured zombie#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/dist/images/creatures/Armoured zombie#Ritual of the Mahjarrat.png differ diff --git a/dist/images/creatures/Armoured zombie#The World Wakes.png b/dist/images/creatures/Armoured zombie#The World Wakes.png new file mode 100644 index 0000000..b7ba172 Binary files /dev/null and b/dist/images/creatures/Armoured zombie#The World Wakes.png differ diff --git a/dist/images/creatures/Astellarn#Default.png b/dist/images/creatures/Astellarn#Default.png new file mode 100644 index 0000000..23c0c59 Binary files /dev/null and b/dist/images/creatures/Astellarn#Default.png differ diff --git a/dist/images/creatures/Automaton Generator#During The World Wakes.png b/dist/images/creatures/Automaton Generator#During The World Wakes.png new file mode 100644 index 0000000..33a1e93 Binary files /dev/null and b/dist/images/creatures/Automaton Generator#During The World Wakes.png differ diff --git a/dist/images/creatures/Automaton Generator#Post-quest.png b/dist/images/creatures/Automaton Generator#Post-quest.png new file mode 100644 index 0000000..33a1e93 Binary files /dev/null and b/dist/images/creatures/Automaton Generator#Post-quest.png differ diff --git a/dist/images/creatures/Automaton Guardian#During The World Wakes.png b/dist/images/creatures/Automaton Guardian#During The World Wakes.png new file mode 100644 index 0000000..0768aec Binary files /dev/null and b/dist/images/creatures/Automaton Guardian#During The World Wakes.png differ diff --git a/dist/images/creatures/Automaton Guardian#Post-quest.png b/dist/images/creatures/Automaton Guardian#Post-quest.png new file mode 100644 index 0000000..0768aec Binary files /dev/null and b/dist/images/creatures/Automaton Guardian#Post-quest.png differ diff --git a/dist/images/creatures/Automaton Tracer#Post-quest.png b/dist/images/creatures/Automaton Tracer#Post-quest.png new file mode 100644 index 0000000..6e90799 Binary files /dev/null and b/dist/images/creatures/Automaton Tracer#Post-quest.png differ diff --git a/dist/images/creatures/Automaton Tracer#The World Wakes.png b/dist/images/creatures/Automaton Tracer#The World Wakes.png new file mode 100644 index 0000000..6e90799 Binary files /dev/null and b/dist/images/creatures/Automaton Tracer#The World Wakes.png differ diff --git a/dist/images/creatures/Avaryss, the Unceasing#Challenge Mode.png b/dist/images/creatures/Avaryss, the Unceasing#Challenge Mode.png new file mode 100644 index 0000000..cbccdaa Binary files /dev/null and b/dist/images/creatures/Avaryss, the Unceasing#Challenge Mode.png differ diff --git a/dist/images/creatures/Avaryss, the Unceasing#Daughter of Chaos.png b/dist/images/creatures/Avaryss, the Unceasing#Daughter of Chaos.png new file mode 100644 index 0000000..cbccdaa Binary files /dev/null and b/dist/images/creatures/Avaryss, the Unceasing#Daughter of Chaos.png differ diff --git a/dist/images/creatures/Avaryss, the Unceasing#Normal Mode.png b/dist/images/creatures/Avaryss, the Unceasing#Normal Mode.png new file mode 100644 index 0000000..cbccdaa Binary files /dev/null and b/dist/images/creatures/Avaryss, the Unceasing#Normal Mode.png differ diff --git a/dist/images/creatures/Aviansie#Melee, level 89 (1).png b/dist/images/creatures/Aviansie#Melee, level 89 (1).png new file mode 100644 index 0000000..04e74bc Binary files /dev/null and b/dist/images/creatures/Aviansie#Melee, level 89 (1).png differ diff --git a/dist/images/creatures/Aviansie#Melee, level 89 (2).png b/dist/images/creatures/Aviansie#Melee, level 89 (2).png new file mode 100644 index 0000000..04e74bc Binary files /dev/null and b/dist/images/creatures/Aviansie#Melee, level 89 (2).png differ diff --git a/dist/images/creatures/Aviansie#Melee, level 92.png b/dist/images/creatures/Aviansie#Melee, level 92.png new file mode 100644 index 0000000..04e74bc Binary files /dev/null and b/dist/images/creatures/Aviansie#Melee, level 92.png differ diff --git a/dist/images/creatures/Aviansie#Ranged, level 89.png b/dist/images/creatures/Aviansie#Ranged, level 89.png new file mode 100644 index 0000000..e4880e9 Binary files /dev/null and b/dist/images/creatures/Aviansie#Ranged, level 89.png differ diff --git a/dist/images/creatures/Aviansie#Ranged, level 92.png b/dist/images/creatures/Aviansie#Ranged, level 92.png new file mode 100644 index 0000000..e4880e9 Binary files /dev/null and b/dist/images/creatures/Aviansie#Ranged, level 92.png differ diff --git a/dist/images/creatures/Aviansie#Ranged, level 95.png b/dist/images/creatures/Aviansie#Ranged, level 95.png new file mode 100644 index 0000000..e4880e9 Binary files /dev/null and b/dist/images/creatures/Aviansie#Ranged, level 95.png differ diff --git a/dist/images/creatures/Baby black dragon#Default.png b/dist/images/creatures/Baby black dragon#Default.png new file mode 100644 index 0000000..fec0331 Binary files /dev/null and b/dist/images/creatures/Baby black dragon#Default.png differ diff --git a/dist/images/creatures/Baby blue dragon#Default.png b/dist/images/creatures/Baby blue dragon#Default.png new file mode 100644 index 0000000..7e7d2c0 Binary files /dev/null and b/dist/images/creatures/Baby blue dragon#Default.png differ diff --git a/dist/images/creatures/Baby red dragon#Default.png b/dist/images/creatures/Baby red dragon#Default.png new file mode 100644 index 0000000..78fa09a Binary files /dev/null and b/dist/images/creatures/Baby red dragon#Default.png differ diff --git a/dist/images/creatures/Balfrug Kreeyath#Default.png b/dist/images/creatures/Balfrug Kreeyath#Default.png new file mode 100644 index 0000000..7cef59f Binary files /dev/null and b/dist/images/creatures/Balfrug Kreeyath#Default.png differ diff --git a/dist/images/creatures/Banshee#Default.png b/dist/images/creatures/Banshee#Default.png new file mode 100644 index 0000000..21a6a38 Binary files /dev/null and b/dist/images/creatures/Banshee#Default.png differ diff --git a/dist/images/creatures/Basilisk#Large.png b/dist/images/creatures/Basilisk#Large.png new file mode 100644 index 0000000..61f7853 Binary files /dev/null and b/dist/images/creatures/Basilisk#Large.png differ diff --git a/dist/images/creatures/Basilisk#Small.png b/dist/images/creatures/Basilisk#Small.png new file mode 100644 index 0000000..16892ae Binary files /dev/null and b/dist/images/creatures/Basilisk#Small.png differ diff --git a/dist/images/creatures/Bat#Default.png b/dist/images/creatures/Bat#Default.png new file mode 100644 index 0000000..f230547 Binary files /dev/null and b/dist/images/creatures/Bat#Default.png differ diff --git a/dist/images/creatures/Bear cub#Default.png b/dist/images/creatures/Bear cub#Default.png new file mode 100644 index 0000000..1044909 Binary files /dev/null and b/dist/images/creatures/Bear cub#Default.png differ diff --git a/dist/images/creatures/Big Wolf#Grey.png b/dist/images/creatures/Big Wolf#Grey.png new file mode 100644 index 0000000..a173013 Binary files /dev/null and b/dist/images/creatures/Big Wolf#Grey.png differ diff --git a/dist/images/creatures/Big Wolf#White.png b/dist/images/creatures/Big Wolf#White.png new file mode 100644 index 0000000..d801388 Binary files /dev/null and b/dist/images/creatures/Big Wolf#White.png differ diff --git a/dist/images/creatures/Big frog#Default.png b/dist/images/creatures/Big frog#Default.png new file mode 100644 index 0000000..5054b8b Binary files /dev/null and b/dist/images/creatures/Big frog#Default.png differ diff --git a/dist/images/creatures/Bird#Black.png b/dist/images/creatures/Bird#Black.png new file mode 100644 index 0000000..5cd67b5 Binary files /dev/null and b/dist/images/creatures/Bird#Black.png differ diff --git a/dist/images/creatures/Bird#Green.png b/dist/images/creatures/Bird#Green.png new file mode 100644 index 0000000..1319269 Binary files /dev/null and b/dist/images/creatures/Bird#Green.png differ diff --git a/dist/images/creatures/Black bear#Default.png b/dist/images/creatures/Black bear#Default.png new file mode 100644 index 0000000..19aa42b Binary files /dev/null and b/dist/images/creatures/Black bear#Default.png differ diff --git a/dist/images/creatures/Black demon#1.png b/dist/images/creatures/Black demon#1.png new file mode 100644 index 0000000..e9c7a1e Binary files /dev/null and b/dist/images/creatures/Black demon#1.png differ diff --git a/dist/images/creatures/Black demon#2.png b/dist/images/creatures/Black demon#2.png new file mode 100644 index 0000000..192b8ed Binary files /dev/null and b/dist/images/creatures/Black demon#2.png differ diff --git a/dist/images/creatures/Black demon#3.png b/dist/images/creatures/Black demon#3.png new file mode 100644 index 0000000..71d95b4 Binary files /dev/null and b/dist/images/creatures/Black demon#3.png differ diff --git a/dist/images/creatures/Black demon#4.png b/dist/images/creatures/Black demon#4.png new file mode 100644 index 0000000..b91ebcd Binary files /dev/null and b/dist/images/creatures/Black demon#4.png differ diff --git a/dist/images/creatures/Black demon#5.png b/dist/images/creatures/Black demon#5.png new file mode 100644 index 0000000..b5c7e0a Binary files /dev/null and b/dist/images/creatures/Black demon#5.png differ diff --git a/dist/images/creatures/Black demon#Wilderness.png b/dist/images/creatures/Black demon#Wilderness.png new file mode 100644 index 0000000..e9c7a1e Binary files /dev/null and b/dist/images/creatures/Black demon#Wilderness.png differ diff --git a/dist/images/creatures/Black dragon (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Black dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..124c86a Binary files /dev/null and b/dist/images/creatures/Black dragon (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Black dragon#1.png b/dist/images/creatures/Black dragon#1.png new file mode 100644 index 0000000..217e2c4 Binary files /dev/null and b/dist/images/creatures/Black dragon#1.png differ diff --git a/dist/images/creatures/Black dragon#2.png b/dist/images/creatures/Black dragon#2.png new file mode 100644 index 0000000..0a4b7f6 Binary files /dev/null and b/dist/images/creatures/Black dragon#2.png differ diff --git a/dist/images/creatures/Black dragon#3.png b/dist/images/creatures/Black dragon#3.png new file mode 100644 index 0000000..c9369d5 Binary files /dev/null and b/dist/images/creatures/Black dragon#3.png differ diff --git a/dist/images/creatures/Black dragon#4.png b/dist/images/creatures/Black dragon#4.png new file mode 100644 index 0000000..e77ff0e Binary files /dev/null and b/dist/images/creatures/Black dragon#4.png differ diff --git a/dist/images/creatures/Black dragon#5.png b/dist/images/creatures/Black dragon#5.png new file mode 100644 index 0000000..badd3b8 Binary files /dev/null and b/dist/images/creatures/Black dragon#5.png differ diff --git a/dist/images/creatures/Black stone dragon#Default.png b/dist/images/creatures/Black stone dragon#Default.png new file mode 100644 index 0000000..0ac21da Binary files /dev/null and b/dist/images/creatures/Black stone dragon#Default.png differ diff --git a/dist/images/creatures/Bladed muspah#Default.png b/dist/images/creatures/Bladed muspah#Default.png new file mode 100644 index 0000000..0ced7ba Binary files /dev/null and b/dist/images/creatures/Bladed muspah#Default.png differ diff --git a/dist/images/creatures/Blissful shadow#Default.png b/dist/images/creatures/Blissful shadow#Default.png new file mode 100644 index 0000000..819801f Binary files /dev/null and b/dist/images/creatures/Blissful shadow#Default.png differ diff --git a/dist/images/creatures/Bloated monstrosity#Normal mode (duo).png b/dist/images/creatures/Bloated monstrosity#Normal mode (duo).png new file mode 100644 index 0000000..91268b2 Binary files /dev/null and b/dist/images/creatures/Bloated monstrosity#Normal mode (duo).png differ diff --git a/dist/images/creatures/Bloated monstrosity#Normal mode (solo).png b/dist/images/creatures/Bloated monstrosity#Normal mode (solo).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/dist/images/creatures/Bloated monstrosity#Normal mode (solo).png differ diff --git a/dist/images/creatures/Bloated monstrosity#Normal mode (trio).png b/dist/images/creatures/Bloated monstrosity#Normal mode (trio).png new file mode 100644 index 0000000..91268b2 Binary files /dev/null and b/dist/images/creatures/Bloated monstrosity#Normal mode (trio).png differ diff --git a/dist/images/creatures/Bloated monstrosity#Story mode (duo).png b/dist/images/creatures/Bloated monstrosity#Story mode (duo).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/dist/images/creatures/Bloated monstrosity#Story mode (duo).png differ diff --git a/dist/images/creatures/Bloated monstrosity#Story mode (solo).png b/dist/images/creatures/Bloated monstrosity#Story mode (solo).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/dist/images/creatures/Bloated monstrosity#Story mode (solo).png differ diff --git a/dist/images/creatures/Bloated monstrosity#Story mode (trio).png b/dist/images/creatures/Bloated monstrosity#Story mode (trio).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/dist/images/creatures/Bloated monstrosity#Story mode (trio).png differ diff --git a/dist/images/creatures/Blood nihil#boss.png b/dist/images/creatures/Blood nihil#boss.png new file mode 100644 index 0000000..d4d6564 Binary files /dev/null and b/dist/images/creatures/Blood nihil#boss.png differ diff --git a/dist/images/creatures/Blood nihil#normal.png b/dist/images/creatures/Blood nihil#normal.png new file mode 100644 index 0000000..d4d6564 Binary files /dev/null and b/dist/images/creatures/Blood nihil#normal.png differ diff --git a/dist/images/creatures/Bloodveld (God Wars Dungeon)#Default.png b/dist/images/creatures/Bloodveld (God Wars Dungeon)#Default.png new file mode 100644 index 0000000..59f3958 Binary files /dev/null and b/dist/images/creatures/Bloodveld (God Wars Dungeon)#Default.png differ diff --git a/dist/images/creatures/Bloodveld (Heart of Gielinor)#Default.png b/dist/images/creatures/Bloodveld (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..2eded56 Binary files /dev/null and b/dist/images/creatures/Bloodveld (Heart of Gielinor)#Default.png differ diff --git a/dist/images/creatures/Bloodveld#Default.png b/dist/images/creatures/Bloodveld#Default.png new file mode 100644 index 0000000..59f3958 Binary files /dev/null and b/dist/images/creatures/Bloodveld#Default.png differ diff --git a/dist/images/creatures/Blue dragon#1.png b/dist/images/creatures/Blue dragon#1.png new file mode 100644 index 0000000..302dc9c Binary files /dev/null and b/dist/images/creatures/Blue dragon#1.png differ diff --git a/dist/images/creatures/Blue dragon#2.png b/dist/images/creatures/Blue dragon#2.png new file mode 100644 index 0000000..7805acb Binary files /dev/null and b/dist/images/creatures/Blue dragon#2.png differ diff --git a/dist/images/creatures/Blue dragon#3.png b/dist/images/creatures/Blue dragon#3.png new file mode 100644 index 0000000..0363215 Binary files /dev/null and b/dist/images/creatures/Blue dragon#3.png differ diff --git a/dist/images/creatures/Blue dragon#4.png b/dist/images/creatures/Blue dragon#4.png new file mode 100644 index 0000000..1eb36bd Binary files /dev/null and b/dist/images/creatures/Blue dragon#4.png differ diff --git a/dist/images/creatures/Blue dragon#5.png b/dist/images/creatures/Blue dragon#5.png new file mode 100644 index 0000000..a39c0f2 Binary files /dev/null and b/dist/images/creatures/Blue dragon#5.png differ diff --git a/dist/images/creatures/Bolstered Glacyte#Default.png b/dist/images/creatures/Bolstered Glacyte#Default.png new file mode 100644 index 0000000..743fbb5 Binary files /dev/null and b/dist/images/creatures/Bolstered Glacyte#Default.png differ diff --git a/dist/images/creatures/Bossy McBossFace#Default.png b/dist/images/creatures/Bossy McBossFace#Default.png new file mode 100644 index 0000000..a3b47e1 Binary files /dev/null and b/dist/images/creatures/Bossy McBossFace#Default.png differ diff --git a/dist/images/creatures/Bossy McBossFace's First mate#Default.png b/dist/images/creatures/Bossy McBossFace's First mate#Default.png new file mode 100644 index 0000000..85f295f Binary files /dev/null and b/dist/images/creatures/Bossy McBossFace's First mate#Default.png differ diff --git a/dist/images/creatures/Bound skeleton#1.png b/dist/images/creatures/Bound skeleton#1.png new file mode 100644 index 0000000..991c908 Binary files /dev/null and b/dist/images/creatures/Bound skeleton#1.png differ diff --git a/dist/images/creatures/Bound skeleton#2.png b/dist/images/creatures/Bound skeleton#2.png new file mode 100644 index 0000000..61534c9 Binary files /dev/null and b/dist/images/creatures/Bound skeleton#2.png differ diff --git a/dist/images/creatures/Bound skeleton#3.png b/dist/images/creatures/Bound skeleton#3.png new file mode 100644 index 0000000..ac717a6 Binary files /dev/null and b/dist/images/creatures/Bound skeleton#3.png differ diff --git a/dist/images/creatures/Brine rat#Default.png b/dist/images/creatures/Brine rat#Default.png new file mode 100644 index 0000000..5c2bc21 Binary files /dev/null and b/dist/images/creatures/Brine rat#Default.png differ diff --git a/dist/images/creatures/Brokeface#Default.png b/dist/images/creatures/Brokeface#Default.png new file mode 100644 index 0000000..c16457d Binary files /dev/null and b/dist/images/creatures/Brokeface#Default.png differ diff --git a/dist/images/creatures/Bronze dragon#Default.png b/dist/images/creatures/Bronze dragon#Default.png new file mode 100644 index 0000000..51bfbe7 Binary files /dev/null and b/dist/images/creatures/Bronze dragon#Default.png differ diff --git a/dist/images/creatures/Brutal green dragon#Default.png b/dist/images/creatures/Brutal green dragon#Default.png new file mode 100644 index 0000000..1eeaeef Binary files /dev/null and b/dist/images/creatures/Brutal green dragon#Default.png differ diff --git a/dist/images/creatures/Brutish dinosaur#Dinosaur invasion.png b/dist/images/creatures/Brutish dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..e0cbcb0 Binary files /dev/null and b/dist/images/creatures/Brutish dinosaur#Dinosaur invasion.png differ diff --git a/dist/images/creatures/Brutish dinosaur#Normal.png b/dist/images/creatures/Brutish dinosaur#Normal.png new file mode 100644 index 0000000..e0cbcb0 Binary files /dev/null and b/dist/images/creatures/Brutish dinosaur#Normal.png differ diff --git a/dist/images/creatures/Bulbous crawler#Default.png b/dist/images/creatures/Bulbous crawler#Default.png new file mode 100644 index 0000000..ba6fe1c Binary files /dev/null and b/dist/images/creatures/Bulbous crawler#Default.png differ diff --git a/dist/images/creatures/Butcher demon#Default.png b/dist/images/creatures/Butcher demon#Default.png new file mode 100644 index 0000000..aa6ad13 Binary files /dev/null and b/dist/images/creatures/Butcher demon#Default.png differ diff --git a/dist/images/creatures/Cadarn magus#Default.png b/dist/images/creatures/Cadarn magus#Default.png new file mode 100644 index 0000000..7babaab Binary files /dev/null and b/dist/images/creatures/Cadarn magus#Default.png differ diff --git a/dist/images/creatures/Cadarn ranger#Default.png b/dist/images/creatures/Cadarn ranger#Default.png new file mode 100644 index 0000000..035050a Binary files /dev/null and b/dist/images/creatures/Cadarn ranger#Default.png differ diff --git a/dist/images/creatures/Camel Warrior#Default.png b/dist/images/creatures/Camel Warrior#Default.png new file mode 100644 index 0000000..04dfb27 Binary files /dev/null and b/dist/images/creatures/Camel Warrior#Default.png differ diff --git a/dist/images/creatures/Capsarius#1.png b/dist/images/creatures/Capsarius#1.png new file mode 100644 index 0000000..63d7efb Binary files /dev/null and b/dist/images/creatures/Capsarius#1.png differ diff --git a/dist/images/creatures/Capsarius#2.png b/dist/images/creatures/Capsarius#2.png new file mode 100644 index 0000000..3d92b21 Binary files /dev/null and b/dist/images/creatures/Capsarius#2.png differ diff --git a/dist/images/creatures/Catablepon#Default.png b/dist/images/creatures/Catablepon#Default.png new file mode 100644 index 0000000..73b5d0a Binary files /dev/null and b/dist/images/creatures/Catablepon#Default.png differ diff --git a/dist/images/creatures/Cave bug#Level 11.png b/dist/images/creatures/Cave bug#Level 11.png new file mode 100644 index 0000000..c1a2270 Binary files /dev/null and b/dist/images/creatures/Cave bug#Level 11.png differ diff --git a/dist/images/creatures/Cave bug#Level 6.png b/dist/images/creatures/Cave bug#Level 6.png new file mode 100644 index 0000000..870a095 Binary files /dev/null and b/dist/images/creatures/Cave bug#Level 6.png differ diff --git a/dist/images/creatures/Cave crawler#Level 24.png b/dist/images/creatures/Cave crawler#Level 24.png new file mode 100644 index 0000000..8d90fdb Binary files /dev/null and b/dist/images/creatures/Cave crawler#Level 24.png differ diff --git a/dist/images/creatures/Cave crawler#Level 59.png b/dist/images/creatures/Cave crawler#Level 59.png new file mode 100644 index 0000000..8d90fdb Binary files /dev/null and b/dist/images/creatures/Cave crawler#Level 59.png differ diff --git a/dist/images/creatures/Cave goblin (monster)#Default.png b/dist/images/creatures/Cave goblin (monster)#Default.png new file mode 100644 index 0000000..8e4ad17 Binary files /dev/null and b/dist/images/creatures/Cave goblin (monster)#Default.png differ diff --git a/dist/images/creatures/Cave goblin guard#Club.png b/dist/images/creatures/Cave goblin guard#Club.png new file mode 100644 index 0000000..c24a58c Binary files /dev/null and b/dist/images/creatures/Cave goblin guard#Club.png differ diff --git a/dist/images/creatures/Cave goblin guard#Spear.png b/dist/images/creatures/Cave goblin guard#Spear.png new file mode 100644 index 0000000..c50838b Binary files /dev/null and b/dist/images/creatures/Cave goblin guard#Spear.png differ diff --git a/dist/images/creatures/Cave goblin miner#Mining.png b/dist/images/creatures/Cave goblin miner#Mining.png new file mode 100644 index 0000000..659fa9d Binary files /dev/null and b/dist/images/creatures/Cave goblin miner#Mining.png differ diff --git a/dist/images/creatures/Cave goblin miner#Slacking off.png b/dist/images/creatures/Cave goblin miner#Slacking off.png new file mode 100644 index 0000000..659fa9d Binary files /dev/null and b/dist/images/creatures/Cave goblin miner#Slacking off.png differ diff --git a/dist/images/creatures/Cave horror (elite)#Default.png b/dist/images/creatures/Cave horror (elite)#Default.png new file mode 100644 index 0000000..1efc58d Binary files /dev/null and b/dist/images/creatures/Cave horror (elite)#Default.png differ diff --git a/dist/images/creatures/Cave horror#Default.png b/dist/images/creatures/Cave horror#Default.png new file mode 100644 index 0000000..1efc58d Binary files /dev/null and b/dist/images/creatures/Cave horror#Default.png differ diff --git a/dist/images/creatures/Cave slime#Default.png b/dist/images/creatures/Cave slime#Default.png new file mode 100644 index 0000000..20b81b5 Binary files /dev/null and b/dist/images/creatures/Cave slime#Default.png differ diff --git a/dist/images/creatures/Celestial dragon (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Celestial dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..b041820 Binary files /dev/null and b/dist/images/creatures/Celestial dragon (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Celestial dragon#Default.png b/dist/images/creatures/Celestial dragon#Default.png new file mode 100644 index 0000000..b041820 Binary files /dev/null and b/dist/images/creatures/Celestial dragon#Default.png differ diff --git a/dist/images/creatures/Cerberus Juvenile#Default.png b/dist/images/creatures/Cerberus Juvenile#Default.png new file mode 100644 index 0000000..c48827c Binary files /dev/null and b/dist/images/creatures/Cerberus Juvenile#Default.png differ diff --git a/dist/images/creatures/Champion of Infernus#Default.png b/dist/images/creatures/Champion of Infernus#Default.png new file mode 100644 index 0000000..45ced27 Binary files /dev/null and b/dist/images/creatures/Champion of Infernus#Default.png differ diff --git a/dist/images/creatures/Chaos Demon Savage#Default.png b/dist/images/creatures/Chaos Demon Savage#Default.png new file mode 100644 index 0000000..edb72bf Binary files /dev/null and b/dist/images/creatures/Chaos Demon Savage#Default.png differ diff --git a/dist/images/creatures/Chaos Demon#Default.png b/dist/images/creatures/Chaos Demon#Default.png new file mode 100644 index 0000000..edb72bf Binary files /dev/null and b/dist/images/creatures/Chaos Demon#Default.png differ diff --git a/dist/images/creatures/Chaos Elemental#F2P.png b/dist/images/creatures/Chaos Elemental#F2P.png new file mode 100644 index 0000000..4cddb5e Binary files /dev/null and b/dist/images/creatures/Chaos Elemental#F2P.png differ diff --git a/dist/images/creatures/Chaos Elemental#P2P.png b/dist/images/creatures/Chaos Elemental#P2P.png new file mode 100644 index 0000000..4cddb5e Binary files /dev/null and b/dist/images/creatures/Chaos Elemental#P2P.png differ diff --git a/dist/images/creatures/Chaos Giant#Default.png b/dist/images/creatures/Chaos Giant#Default.png new file mode 100644 index 0000000..e692ba9 Binary files /dev/null and b/dist/images/creatures/Chaos Giant#Default.png differ diff --git a/dist/images/creatures/Chicken#Brown.png b/dist/images/creatures/Chicken#Brown.png new file mode 100644 index 0000000..ce91d61 Binary files /dev/null and b/dist/images/creatures/Chicken#Brown.png differ diff --git a/dist/images/creatures/Chicken#White.png b/dist/images/creatures/Chicken#White.png new file mode 100644 index 0000000..596ee13 Binary files /dev/null and b/dist/images/creatures/Chicken#White.png differ diff --git a/dist/images/creatures/Chompy bird#Default.png b/dist/images/creatures/Chompy bird#Default.png new file mode 100644 index 0000000..efda171 Binary files /dev/null and b/dist/images/creatures/Chompy bird#Default.png differ diff --git a/dist/images/creatures/Cockatrice#Default.png b/dist/images/creatures/Cockatrice#Default.png new file mode 100644 index 0000000..5598515 Binary files /dev/null and b/dist/images/creatures/Cockatrice#Default.png differ diff --git a/dist/images/creatures/Cockroach drone#Default.png b/dist/images/creatures/Cockroach drone#Default.png new file mode 100644 index 0000000..3e56461 Binary files /dev/null and b/dist/images/creatures/Cockroach drone#Default.png differ diff --git a/dist/images/creatures/Cockroach soldier#Default.png b/dist/images/creatures/Cockroach soldier#Default.png new file mode 100644 index 0000000..3bd1063 Binary files /dev/null and b/dist/images/creatures/Cockroach soldier#Default.png differ diff --git a/dist/images/creatures/Cockroach worker#Default.png b/dist/images/creatures/Cockroach worker#Default.png new file mode 100644 index 0000000..c44edc6 Binary files /dev/null and b/dist/images/creatures/Cockroach worker#Default.png differ diff --git a/dist/images/creatures/Commander Zilyana#Aftermath.png b/dist/images/creatures/Commander Zilyana#Aftermath.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Aftermath.png differ diff --git a/dist/images/creatures/Commander Zilyana#Battle of the Monolith.png b/dist/images/creatures/Commander Zilyana#Battle of the Monolith.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Battle of the Monolith.png differ diff --git a/dist/images/creatures/Commander Zilyana#Council of Burthorpe.png b/dist/images/creatures/Commander Zilyana#Council of Burthorpe.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Council of Burthorpe.png differ diff --git a/dist/images/creatures/Commander Zilyana#Extinction.png b/dist/images/creatures/Commander Zilyana#Extinction.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Extinction.png differ diff --git a/dist/images/creatures/Commander Zilyana#Gower Quest.png b/dist/images/creatures/Commander Zilyana#Gower Quest.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Gower Quest.png differ diff --git a/dist/images/creatures/Commander Zilyana#Missing, Presumed Death.png b/dist/images/creatures/Commander Zilyana#Missing, Presumed Death.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Missing, Presumed Death.png differ diff --git a/dist/images/creatures/Commander Zilyana#Once Upon a Time in Gielinor.png b/dist/images/creatures/Commander Zilyana#Once Upon a Time in Gielinor.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Once Upon a Time in Gielinor.png differ diff --git a/dist/images/creatures/Commander Zilyana#Ritual of the Mahjarrat.png b/dist/images/creatures/Commander Zilyana#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Ritual of the Mahjarrat.png differ diff --git a/dist/images/creatures/Commander Zilyana#Senntisten.png b/dist/images/creatures/Commander Zilyana#Senntisten.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#Senntisten.png differ diff --git a/dist/images/creatures/Commander Zilyana#The World Wakes.png b/dist/images/creatures/Commander Zilyana#The World Wakes.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/dist/images/creatures/Commander Zilyana#The World Wakes.png differ diff --git a/dist/images/creatures/Corporeal Beast#Default.png b/dist/images/creatures/Corporeal Beast#Default.png new file mode 100644 index 0000000..dc29bae Binary files /dev/null and b/dist/images/creatures/Corporeal Beast#Default.png differ diff --git a/dist/images/creatures/Corpse archer#Default.png b/dist/images/creatures/Corpse archer#Default.png new file mode 100644 index 0000000..72c57a1 Binary files /dev/null and b/dist/images/creatures/Corpse archer#Default.png differ diff --git a/dist/images/creatures/Corpse carrier#Normal mode (duo).png b/dist/images/creatures/Corpse carrier#Normal mode (duo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/dist/images/creatures/Corpse carrier#Normal mode (duo).png differ diff --git a/dist/images/creatures/Corpse carrier#Normal mode (solo).png b/dist/images/creatures/Corpse carrier#Normal mode (solo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/dist/images/creatures/Corpse carrier#Normal mode (solo).png differ diff --git a/dist/images/creatures/Corpse carrier#Normal mode (trio).png b/dist/images/creatures/Corpse carrier#Normal mode (trio).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/dist/images/creatures/Corpse carrier#Normal mode (trio).png differ diff --git a/dist/images/creatures/Corpse carrier#Story mode (duo).png b/dist/images/creatures/Corpse carrier#Story mode (duo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/dist/images/creatures/Corpse carrier#Story mode (duo).png differ diff --git a/dist/images/creatures/Corpse carrier#Story mode (solo).png b/dist/images/creatures/Corpse carrier#Story mode (solo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/dist/images/creatures/Corpse carrier#Story mode (solo).png differ diff --git a/dist/images/creatures/Corpse carrier#Story mode (trio).png b/dist/images/creatures/Corpse carrier#Story mode (trio).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/dist/images/creatures/Corpse carrier#Story mode (trio).png differ diff --git a/dist/images/creatures/Corpse mage#Default.png b/dist/images/creatures/Corpse mage#Default.png new file mode 100644 index 0000000..a3294fd Binary files /dev/null and b/dist/images/creatures/Corpse mage#Default.png differ diff --git a/dist/images/creatures/Corpse spider#Default.png b/dist/images/creatures/Corpse spider#Default.png new file mode 100644 index 0000000..12f9a63 Binary files /dev/null and b/dist/images/creatures/Corpse spider#Default.png differ diff --git a/dist/images/creatures/Corrupted dust devil#Default.png b/dist/images/creatures/Corrupted dust devil#Default.png new file mode 100644 index 0000000..42f13c6 Binary files /dev/null and b/dist/images/creatures/Corrupted dust devil#Default.png differ diff --git a/dist/images/creatures/Corrupted kalphite guardian#Default.png b/dist/images/creatures/Corrupted kalphite guardian#Default.png new file mode 100644 index 0000000..1d20599 Binary files /dev/null and b/dist/images/creatures/Corrupted kalphite guardian#Default.png differ diff --git a/dist/images/creatures/Corrupted kalphite marauder#Default.png b/dist/images/creatures/Corrupted kalphite marauder#Default.png new file mode 100644 index 0000000..1fa140c Binary files /dev/null and b/dist/images/creatures/Corrupted kalphite marauder#Default.png differ diff --git a/dist/images/creatures/Corrupted lizard#Default.png b/dist/images/creatures/Corrupted lizard#Default.png new file mode 100644 index 0000000..48caa1c Binary files /dev/null and b/dist/images/creatures/Corrupted lizard#Default.png differ diff --git a/dist/images/creatures/Corrupted scarab#Default.png b/dist/images/creatures/Corrupted scarab#Default.png new file mode 100644 index 0000000..0045413 Binary files /dev/null and b/dist/images/creatures/Corrupted scarab#Default.png differ diff --git a/dist/images/creatures/Corrupted scorpion#Default.png b/dist/images/creatures/Corrupted scorpion#Default.png new file mode 100644 index 0000000..060bb10 Binary files /dev/null and b/dist/images/creatures/Corrupted scorpion#Default.png differ diff --git a/dist/images/creatures/Corrupted worker#Default.png b/dist/images/creatures/Corrupted worker#Default.png new file mode 100644 index 0000000..27d1885 Binary files /dev/null and b/dist/images/creatures/Corrupted worker#Default.png differ diff --git a/dist/images/creatures/Cow calf#Default.png b/dist/images/creatures/Cow calf#Default.png new file mode 100644 index 0000000..37e816f Binary files /dev/null and b/dist/images/creatures/Cow calf#Default.png differ diff --git a/dist/images/creatures/Cow#Standard (1).png b/dist/images/creatures/Cow#Standard (1).png new file mode 100644 index 0000000..f22a631 Binary files /dev/null and b/dist/images/creatures/Cow#Standard (1).png differ diff --git a/dist/images/creatures/Cow#Standard (2).png b/dist/images/creatures/Cow#Standard (2).png new file mode 100644 index 0000000..d7c1d2b Binary files /dev/null and b/dist/images/creatures/Cow#Standard (2).png differ diff --git a/dist/images/creatures/Cow#Standard (3).png b/dist/images/creatures/Cow#Standard (3).png new file mode 100644 index 0000000..56dbbe4 Binary files /dev/null and b/dist/images/creatures/Cow#Standard (3).png differ diff --git a/dist/images/creatures/Cow#Zanaris.png b/dist/images/creatures/Cow#Zanaris.png new file mode 100644 index 0000000..fc80aaa Binary files /dev/null and b/dist/images/creatures/Cow#Zanaris.png differ diff --git a/dist/images/creatures/Crawling corpse torso#Default.png b/dist/images/creatures/Crawling corpse torso#Default.png new file mode 100644 index 0000000..f87ac28 Binary files /dev/null and b/dist/images/creatures/Crawling corpse torso#Default.png differ diff --git a/dist/images/creatures/Crawling hand#10a.png b/dist/images/creatures/Crawling hand#10a.png new file mode 100644 index 0000000..3931804 Binary files /dev/null and b/dist/images/creatures/Crawling hand#10a.png differ diff --git a/dist/images/creatures/Crawling hand#10b.png b/dist/images/creatures/Crawling hand#10b.png new file mode 100644 index 0000000..addcd75 Binary files /dev/null and b/dist/images/creatures/Crawling hand#10b.png differ diff --git a/dist/images/creatures/Crawling hand#10c.png b/dist/images/creatures/Crawling hand#10c.png new file mode 100644 index 0000000..49f283b Binary files /dev/null and b/dist/images/creatures/Crawling hand#10c.png differ diff --git a/dist/images/creatures/Crawling hand#10d.png b/dist/images/creatures/Crawling hand#10d.png new file mode 100644 index 0000000..3918bf2 Binary files /dev/null and b/dist/images/creatures/Crawling hand#10d.png differ diff --git a/dist/images/creatures/Crawling hand#10e.png b/dist/images/creatures/Crawling hand#10e.png new file mode 100644 index 0000000..38a1387 Binary files /dev/null and b/dist/images/creatures/Crawling hand#10e.png differ diff --git a/dist/images/creatures/Crawling hand#6a.png b/dist/images/creatures/Crawling hand#6a.png new file mode 100644 index 0000000..1437b35 Binary files /dev/null and b/dist/images/creatures/Crawling hand#6a.png differ diff --git a/dist/images/creatures/Crawling hand#6b.png b/dist/images/creatures/Crawling hand#6b.png new file mode 100644 index 0000000..90378ff Binary files /dev/null and b/dist/images/creatures/Crawling hand#6b.png differ diff --git a/dist/images/creatures/Crawling hand#6c.png b/dist/images/creatures/Crawling hand#6c.png new file mode 100644 index 0000000..9a57966 Binary files /dev/null and b/dist/images/creatures/Crawling hand#6c.png differ diff --git a/dist/images/creatures/Crawling hand#6d.png b/dist/images/creatures/Crawling hand#6d.png new file mode 100644 index 0000000..f3c2774 Binary files /dev/null and b/dist/images/creatures/Crawling hand#6d.png differ diff --git a/dist/images/creatures/Crawling hand#6e.png b/dist/images/creatures/Crawling hand#6e.png new file mode 100644 index 0000000..3fcadc0 Binary files /dev/null and b/dist/images/creatures/Crawling hand#6e.png differ diff --git a/dist/images/creatures/Crocodile akh#Default.png b/dist/images/creatures/Crocodile akh#Default.png new file mode 100644 index 0000000..0933273 Binary files /dev/null and b/dist/images/creatures/Crocodile akh#Default.png differ diff --git a/dist/images/creatures/Crocodile#40.png b/dist/images/creatures/Crocodile#40.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/dist/images/creatures/Crocodile#40.png differ diff --git a/dist/images/creatures/Crocodile#77.png b/dist/images/creatures/Crocodile#77.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/dist/images/creatures/Crocodile#77.png differ diff --git a/dist/images/creatures/Croesus#Active.png b/dist/images/creatures/Croesus#Active.png new file mode 100644 index 0000000..620b559 Binary files /dev/null and b/dist/images/creatures/Croesus#Active.png differ diff --git a/dist/images/creatures/Croesus#Dormant.png b/dist/images/creatures/Croesus#Dormant.png new file mode 100644 index 0000000..3285962 Binary files /dev/null and b/dist/images/creatures/Croesus#Dormant.png differ diff --git a/dist/images/creatures/Crypt rat#Default.png b/dist/images/creatures/Crypt rat#Default.png new file mode 100644 index 0000000..e2da29f Binary files /dev/null and b/dist/images/creatures/Crypt rat#Default.png differ diff --git a/dist/images/creatures/Crypt spider#Default.png b/dist/images/creatures/Crypt spider#Default.png new file mode 100644 index 0000000..cfa2ec6 Binary files /dev/null and b/dist/images/creatures/Crypt spider#Default.png differ diff --git a/dist/images/creatures/Crystal Shapeshifter#Magic.png b/dist/images/creatures/Crystal Shapeshifter#Magic.png new file mode 100644 index 0000000..b20e768 Binary files /dev/null and b/dist/images/creatures/Crystal Shapeshifter#Magic.png differ diff --git a/dist/images/creatures/Crystal Shapeshifter#Melee.png b/dist/images/creatures/Crystal Shapeshifter#Melee.png new file mode 100644 index 0000000..848114b Binary files /dev/null and b/dist/images/creatures/Crystal Shapeshifter#Melee.png differ diff --git a/dist/images/creatures/Crystal Shapeshifter#Ranged.png b/dist/images/creatures/Crystal Shapeshifter#Ranged.png new file mode 100644 index 0000000..4f35543 Binary files /dev/null and b/dist/images/creatures/Crystal Shapeshifter#Ranged.png differ diff --git a/dist/images/creatures/Cyclops#57 (Crush).png b/dist/images/creatures/Cyclops#57 (Crush).png new file mode 100644 index 0000000..9da10e1 Binary files /dev/null and b/dist/images/creatures/Cyclops#57 (Crush).png differ diff --git a/dist/images/creatures/Cyclops#57 (Slash).png b/dist/images/creatures/Cyclops#57 (Slash).png new file mode 100644 index 0000000..c36e469 Binary files /dev/null and b/dist/images/creatures/Cyclops#57 (Slash).png differ diff --git a/dist/images/creatures/Cyclops#57 (Stab).png b/dist/images/creatures/Cyclops#57 (Stab).png new file mode 100644 index 0000000..f7b9a10 Binary files /dev/null and b/dist/images/creatures/Cyclops#57 (Stab).png differ diff --git a/dist/images/creatures/Cyclops#68 (Crush).png b/dist/images/creatures/Cyclops#68 (Crush).png new file mode 100644 index 0000000..0b7a15c Binary files /dev/null and b/dist/images/creatures/Cyclops#68 (Crush).png differ diff --git a/dist/images/creatures/Cyclops#68 (Slash).png b/dist/images/creatures/Cyclops#68 (Slash).png new file mode 100644 index 0000000..2a2d250 Binary files /dev/null and b/dist/images/creatures/Cyclops#68 (Slash).png differ diff --git a/dist/images/creatures/Cyclops#68 (Stab).png b/dist/images/creatures/Cyclops#68 (Stab).png new file mode 100644 index 0000000..4472898 Binary files /dev/null and b/dist/images/creatures/Cyclops#68 (Stab).png differ diff --git a/dist/images/creatures/Cyclops#91 (God Wars Dungeon), 1.png b/dist/images/creatures/Cyclops#91 (God Wars Dungeon), 1.png new file mode 100644 index 0000000..bdd7480 Binary files /dev/null and b/dist/images/creatures/Cyclops#91 (God Wars Dungeon), 1.png differ diff --git a/dist/images/creatures/Cyclops#91 (God Wars Dungeon), 2.png b/dist/images/creatures/Cyclops#91 (God Wars Dungeon), 2.png new file mode 100644 index 0000000..4799e36 Binary files /dev/null and b/dist/images/creatures/Cyclops#91 (God Wars Dungeon), 2.png differ diff --git a/dist/images/creatures/Cyclossus#Default.png b/dist/images/creatures/Cyclossus#Default.png new file mode 100644 index 0000000..dbb51f0 Binary files /dev/null and b/dist/images/creatures/Cyclossus#Default.png differ diff --git a/dist/images/creatures/Dagannoth (Lighthouse)#Level 77.png b/dist/images/creatures/Dagannoth (Lighthouse)#Level 77.png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/dist/images/creatures/Dagannoth (Lighthouse)#Level 77.png differ diff --git a/dist/images/creatures/Dagannoth (Lighthouse)#Level 78.png b/dist/images/creatures/Dagannoth (Lighthouse)#Level 78.png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/dist/images/creatures/Dagannoth (Lighthouse)#Level 78.png differ diff --git a/dist/images/creatures/Dagannoth (Waterbirth Island)#Blood Runs Deep (78).png b/dist/images/creatures/Dagannoth (Waterbirth Island)#Blood Runs Deep (78).png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/dist/images/creatures/Dagannoth (Waterbirth Island)#Blood Runs Deep (78).png differ diff --git a/dist/images/creatures/Dagannoth (Waterbirth Island)#Melee (78).png b/dist/images/creatures/Dagannoth (Waterbirth Island)#Melee (78).png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/dist/images/creatures/Dagannoth (Waterbirth Island)#Melee (78).png differ diff --git a/dist/images/creatures/Dagannoth (Waterbirth Island)#Melee (79).png b/dist/images/creatures/Dagannoth (Waterbirth Island)#Melee (79).png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/dist/images/creatures/Dagannoth (Waterbirth Island)#Melee (79).png differ diff --git a/dist/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (78).png b/dist/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (78).png new file mode 100644 index 0000000..d5b55dc Binary files /dev/null and b/dist/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (78).png differ diff --git a/dist/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (79).png b/dist/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (79).png new file mode 100644 index 0000000..d5b55dc Binary files /dev/null and b/dist/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (79).png differ diff --git a/dist/images/creatures/Dagannoth Prime#Default.png b/dist/images/creatures/Dagannoth Prime#Default.png new file mode 100644 index 0000000..4c1cc9a Binary files /dev/null and b/dist/images/creatures/Dagannoth Prime#Default.png differ diff --git a/dist/images/creatures/Dagannoth Rex#Default.png b/dist/images/creatures/Dagannoth Rex#Default.png new file mode 100644 index 0000000..f8b6d6d Binary files /dev/null and b/dist/images/creatures/Dagannoth Rex#Default.png differ diff --git a/dist/images/creatures/Dagannoth Supreme#Default.png b/dist/images/creatures/Dagannoth Supreme#Default.png new file mode 100644 index 0000000..5dec8b4 Binary files /dev/null and b/dist/images/creatures/Dagannoth Supreme#Default.png differ diff --git a/dist/images/creatures/Dagannoth fledgeling#Default.png b/dist/images/creatures/Dagannoth fledgeling#Default.png new file mode 100644 index 0000000..93ae190 Binary files /dev/null and b/dist/images/creatures/Dagannoth fledgeling#Default.png differ diff --git a/dist/images/creatures/Dagannoth guardian#Default.png b/dist/images/creatures/Dagannoth guardian#Default.png new file mode 100644 index 0000000..3d657be Binary files /dev/null and b/dist/images/creatures/Dagannoth guardian#Default.png differ diff --git a/dist/images/creatures/Dagannoth spawn#Default.png b/dist/images/creatures/Dagannoth spawn#Default.png new file mode 100644 index 0000000..13af6b7 Binary files /dev/null and b/dist/images/creatures/Dagannoth spawn#Default.png differ diff --git a/dist/images/creatures/Dark beast (elite)#Default.png b/dist/images/creatures/Dark beast (elite)#Default.png new file mode 100644 index 0000000..a2ec825 Binary files /dev/null and b/dist/images/creatures/Dark beast (elite)#Default.png differ diff --git a/dist/images/creatures/Dark beast#19,000 life points.png b/dist/images/creatures/Dark beast#19,000 life points.png new file mode 100644 index 0000000..a2ec825 Binary files /dev/null and b/dist/images/creatures/Dark beast#19,000 life points.png differ diff --git a/dist/images/creatures/Dark beast#8,500 life points.png b/dist/images/creatures/Dark beast#8,500 life points.png new file mode 100644 index 0000000..a2ec825 Binary files /dev/null and b/dist/images/creatures/Dark beast#8,500 life points.png differ diff --git a/dist/images/creatures/Deadly red spider#Default.png b/dist/images/creatures/Deadly red spider#Default.png new file mode 100644 index 0000000..2ea4125 Binary files /dev/null and b/dist/images/creatures/Deadly red spider#Default.png differ diff --git a/dist/images/creatures/Denizen of Infernus#Default.png b/dist/images/creatures/Denizen of Infernus#Default.png new file mode 100644 index 0000000..edb72bf Binary files /dev/null and b/dist/images/creatures/Denizen of Infernus#Default.png differ diff --git a/dist/images/creatures/Desert Lizard#Brown.png b/dist/images/creatures/Desert Lizard#Brown.png new file mode 100644 index 0000000..e770413 Binary files /dev/null and b/dist/images/creatures/Desert Lizard#Brown.png differ diff --git a/dist/images/creatures/Desert Lizard#Green.png b/dist/images/creatures/Desert Lizard#Green.png new file mode 100644 index 0000000..bfdd4d7 Binary files /dev/null and b/dist/images/creatures/Desert Lizard#Green.png differ diff --git a/dist/images/creatures/Desert Lizard#Yellow.png b/dist/images/creatures/Desert Lizard#Yellow.png new file mode 100644 index 0000000..6c23a72 Binary files /dev/null and b/dist/images/creatures/Desert Lizard#Yellow.png differ diff --git a/dist/images/creatures/Desert strykewyrm#Default.png b/dist/images/creatures/Desert strykewyrm#Default.png new file mode 100644 index 0000000..dccc2e3 Binary files /dev/null and b/dist/images/creatures/Desert strykewyrm#Default.png differ diff --git a/dist/images/creatures/Desert wolf#Brown.png b/dist/images/creatures/Desert wolf#Brown.png new file mode 100644 index 0000000..9599b1e Binary files /dev/null and b/dist/images/creatures/Desert wolf#Brown.png differ diff --git a/dist/images/creatures/Desert wolf#Grey.png b/dist/images/creatures/Desert wolf#Grey.png new file mode 100644 index 0000000..64f0d7b Binary files /dev/null and b/dist/images/creatures/Desert wolf#Grey.png differ diff --git a/dist/images/creatures/Devil's snare#Default.png b/dist/images/creatures/Devil's snare#Default.png new file mode 100644 index 0000000..241b62e Binary files /dev/null and b/dist/images/creatures/Devil's snare#Default.png differ diff --git a/dist/images/creatures/Dharok the Wretched#Normal.png b/dist/images/creatures/Dharok the Wretched#Normal.png new file mode 100644 index 0000000..4f17a4c Binary files /dev/null and b/dist/images/creatures/Dharok the Wretched#Normal.png differ diff --git a/dist/images/creatures/Dharok the Wretched#Rise of the Six.png b/dist/images/creatures/Dharok the Wretched#Rise of the Six.png new file mode 100644 index 0000000..d97e246 Binary files /dev/null and b/dist/images/creatures/Dharok the Wretched#Rise of the Six.png differ diff --git a/dist/images/creatures/Dharok the Wretched#Ritual of the Mahjarrat.png b/dist/images/creatures/Dharok the Wretched#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..4f17a4c Binary files /dev/null and b/dist/images/creatures/Dharok the Wretched#Ritual of the Mahjarrat.png differ diff --git a/dist/images/creatures/Dire Wolf#Default.png b/dist/images/creatures/Dire Wolf#Default.png new file mode 100644 index 0000000..7a2f31c Binary files /dev/null and b/dist/images/creatures/Dire Wolf#Default.png differ diff --git a/dist/images/creatures/Dragith Nurn#Default.png b/dist/images/creatures/Dragith Nurn#Default.png new file mode 100644 index 0000000..102f87c Binary files /dev/null and b/dist/images/creatures/Dragith Nurn#Default.png differ diff --git a/dist/images/creatures/Dragonstone dragon (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Dragonstone dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..0bc39e7 Binary files /dev/null and b/dist/images/creatures/Dragonstone dragon (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Dragonstone dragon#Default.png b/dist/images/creatures/Dragonstone dragon#Default.png new file mode 100644 index 0000000..9573a4d Binary files /dev/null and b/dist/images/creatures/Dragonstone dragon#Default.png differ diff --git a/dist/images/creatures/Dried zombie#Dried.png b/dist/images/creatures/Dried zombie#Dried.png new file mode 100644 index 0000000..70d964d Binary files /dev/null and b/dist/images/creatures/Dried zombie#Dried.png differ diff --git a/dist/images/creatures/Dried zombie#Parched.png b/dist/images/creatures/Dried zombie#Parched.png new file mode 100644 index 0000000..3658e09 Binary files /dev/null and b/dist/images/creatures/Dried zombie#Parched.png differ diff --git a/dist/images/creatures/Dried zombie#Unmoisturised.png b/dist/images/creatures/Dried zombie#Unmoisturised.png new file mode 100644 index 0000000..1538c18 Binary files /dev/null and b/dist/images/creatures/Dried zombie#Unmoisturised.png differ diff --git a/dist/images/creatures/Duck#Female.png b/dist/images/creatures/Duck#Female.png new file mode 100644 index 0000000..0efe33f Binary files /dev/null and b/dist/images/creatures/Duck#Female.png differ diff --git a/dist/images/creatures/Duck#Land.png b/dist/images/creatures/Duck#Land.png new file mode 100644 index 0000000..a42c11d Binary files /dev/null and b/dist/images/creatures/Duck#Land.png differ diff --git a/dist/images/creatures/Duck#Male.png b/dist/images/creatures/Duck#Male.png new file mode 100644 index 0000000..c39e51e Binary files /dev/null and b/dist/images/creatures/Duck#Male.png differ diff --git a/dist/images/creatures/Duckling#Default.png b/dist/images/creatures/Duckling#Default.png new file mode 100644 index 0000000..24f76de Binary files /dev/null and b/dist/images/creatures/Duckling#Default.png differ diff --git a/dist/images/creatures/Dungeon rat#Level 11 (1).png b/dist/images/creatures/Dungeon rat#Level 11 (1).png new file mode 100644 index 0000000..c076261 Binary files /dev/null and b/dist/images/creatures/Dungeon rat#Level 11 (1).png differ diff --git a/dist/images/creatures/Dungeon rat#Level 11 (2).png b/dist/images/creatures/Dungeon rat#Level 11 (2).png new file mode 100644 index 0000000..ef8193f Binary files /dev/null and b/dist/images/creatures/Dungeon rat#Level 11 (2).png differ diff --git a/dist/images/creatures/Dungeon rat#Level 11 (3).png b/dist/images/creatures/Dungeon rat#Level 11 (3).png new file mode 100644 index 0000000..355894b Binary files /dev/null and b/dist/images/creatures/Dungeon rat#Level 11 (3).png differ diff --git a/dist/images/creatures/Dungeon rat#Level 18 (brown).png b/dist/images/creatures/Dungeon rat#Level 18 (brown).png new file mode 100644 index 0000000..660d10a Binary files /dev/null and b/dist/images/creatures/Dungeon rat#Level 18 (brown).png differ diff --git a/dist/images/creatures/Dungeon rat#Level 18 (brown, arrows).png b/dist/images/creatures/Dungeon rat#Level 18 (brown, arrows).png new file mode 100644 index 0000000..67c5fd3 Binary files /dev/null and b/dist/images/creatures/Dungeon rat#Level 18 (brown, arrows).png differ diff --git a/dist/images/creatures/Dungeon rat#Level 18 (grey).png b/dist/images/creatures/Dungeon rat#Level 18 (grey).png new file mode 100644 index 0000000..fb36c35 Binary files /dev/null and b/dist/images/creatures/Dungeon rat#Level 18 (grey).png differ diff --git a/dist/images/creatures/Dust devil (elite)#Default.png b/dist/images/creatures/Dust devil (elite)#Default.png new file mode 100644 index 0000000..1c3590f Binary files /dev/null and b/dist/images/creatures/Dust devil (elite)#Default.png differ diff --git a/dist/images/creatures/Dust devil#Default.png b/dist/images/creatures/Dust devil#Default.png new file mode 100644 index 0000000..1c3590f Binary files /dev/null and b/dist/images/creatures/Dust devil#Default.png differ diff --git a/dist/images/creatures/Earth warrior (elite)#Default.png b/dist/images/creatures/Earth warrior (elite)#Default.png new file mode 100644 index 0000000..be7d624 Binary files /dev/null and b/dist/images/creatures/Earth warrior (elite)#Default.png differ diff --git a/dist/images/creatures/Earth warrior#Default.png b/dist/images/creatures/Earth warrior#Default.png new file mode 100644 index 0000000..be7d624 Binary files /dev/null and b/dist/images/creatures/Earth warrior#Default.png differ diff --git a/dist/images/creatures/Edimmu (elite)#Default.png b/dist/images/creatures/Edimmu (elite)#Default.png new file mode 100644 index 0000000..507aa45 Binary files /dev/null and b/dist/images/creatures/Edimmu (elite)#Default.png differ diff --git a/dist/images/creatures/Edimmu#Default.png b/dist/images/creatures/Edimmu#Default.png new file mode 100644 index 0000000..8d64ccb Binary files /dev/null and b/dist/images/creatures/Edimmu#Default.png differ diff --git a/dist/images/creatures/Elegorn the Celestial#Default.png b/dist/images/creatures/Elegorn the Celestial#Default.png new file mode 100644 index 0000000..a18c825 Binary files /dev/null and b/dist/images/creatures/Elegorn the Celestial#Default.png differ diff --git a/dist/images/creatures/Elf warrior#Melee.png b/dist/images/creatures/Elf warrior#Melee.png new file mode 100644 index 0000000..9e0ea4a Binary files /dev/null and b/dist/images/creatures/Elf warrior#Melee.png differ diff --git a/dist/images/creatures/Elf warrior#Range.png b/dist/images/creatures/Elf warrior#Range.png new file mode 100644 index 0000000..a9a6356 Binary files /dev/null and b/dist/images/creatures/Elf warrior#Range.png differ diff --git a/dist/images/creatures/Elite rune dragon#Armoured.png b/dist/images/creatures/Elite rune dragon#Armoured.png new file mode 100644 index 0000000..d920984 Binary files /dev/null and b/dist/images/creatures/Elite rune dragon#Armoured.png differ diff --git a/dist/images/creatures/Elite rune dragon#Unarmoured.png b/dist/images/creatures/Elite rune dragon#Unarmoured.png new file mode 100644 index 0000000..3bea209 Binary files /dev/null and b/dist/images/creatures/Elite rune dragon#Unarmoured.png differ diff --git a/dist/images/creatures/Enclave guard#Default.png b/dist/images/creatures/Enclave guard#Default.png new file mode 100644 index 0000000..ad246fc Binary files /dev/null and b/dist/images/creatures/Enclave guard#Default.png differ diff --git a/dist/images/creatures/Enduring glacyte#Default.png b/dist/images/creatures/Enduring glacyte#Default.png new file mode 100644 index 0000000..95ad116 Binary files /dev/null and b/dist/images/creatures/Enduring glacyte#Default.png differ diff --git a/dist/images/creatures/Engorged lava strykewyrm#Default.png b/dist/images/creatures/Engorged lava strykewyrm#Default.png new file mode 100644 index 0000000..430a8f6 Binary files /dev/null and b/dist/images/creatures/Engorged lava strykewyrm#Default.png differ diff --git a/dist/images/creatures/Exiled Kalphite Queen#First form.png b/dist/images/creatures/Exiled Kalphite Queen#First form.png new file mode 100644 index 0000000..e4be535 Binary files /dev/null and b/dist/images/creatures/Exiled Kalphite Queen#First form.png differ diff --git a/dist/images/creatures/Exiled Kalphite Queen#Second form.png b/dist/images/creatures/Exiled Kalphite Queen#Second form.png new file mode 100644 index 0000000..6445856 Binary files /dev/null and b/dist/images/creatures/Exiled Kalphite Queen#Second form.png differ diff --git a/dist/images/creatures/Exiled kalphite guardian#Default.png b/dist/images/creatures/Exiled kalphite guardian#Default.png new file mode 100644 index 0000000..f8b0e8e Binary files /dev/null and b/dist/images/creatures/Exiled kalphite guardian#Default.png differ diff --git a/dist/images/creatures/Exiled kalphite marauder#Kalphite King.png b/dist/images/creatures/Exiled kalphite marauder#Kalphite King.png new file mode 100644 index 0000000..00335b4 Binary files /dev/null and b/dist/images/creatures/Exiled kalphite marauder#Kalphite King.png differ diff --git a/dist/images/creatures/Exiled kalphite marauder#Normal.png b/dist/images/creatures/Exiled kalphite marauder#Normal.png new file mode 100644 index 0000000..00335b4 Binary files /dev/null and b/dist/images/creatures/Exiled kalphite marauder#Normal.png differ diff --git a/dist/images/creatures/Exiled kalphite paragon#Default.png b/dist/images/creatures/Exiled kalphite paragon#Default.png new file mode 100644 index 0000000..3efdba5 Binary files /dev/null and b/dist/images/creatures/Exiled kalphite paragon#Default.png differ diff --git a/dist/images/creatures/Exiled kalphite soldier#Default.png b/dist/images/creatures/Exiled kalphite soldier#Default.png new file mode 100644 index 0000000..7df3604 Binary files /dev/null and b/dist/images/creatures/Exiled kalphite soldier#Default.png differ diff --git a/dist/images/creatures/Exiled kalphite worker#Default.png b/dist/images/creatures/Exiled kalphite worker#Default.png new file mode 100644 index 0000000..7eef506 Binary files /dev/null and b/dist/images/creatures/Exiled kalphite worker#Default.png differ diff --git a/dist/images/creatures/Feline akh#Default.png b/dist/images/creatures/Feline akh#Default.png new file mode 100644 index 0000000..0978dea Binary files /dev/null and b/dist/images/creatures/Feline akh#Default.png differ diff --git a/dist/images/creatures/Fenris wolf#Default.png b/dist/images/creatures/Fenris wolf#Default.png new file mode 100644 index 0000000..d8de43b Binary files /dev/null and b/dist/images/creatures/Fenris wolf#Default.png differ diff --git a/dist/images/creatures/Feral Dinosaur#Dinosaur invasion.png b/dist/images/creatures/Feral Dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..bad669e Binary files /dev/null and b/dist/images/creatures/Feral Dinosaur#Dinosaur invasion.png differ diff --git a/dist/images/creatures/Feral Dinosaur#Normal.png b/dist/images/creatures/Feral Dinosaur#Normal.png new file mode 100644 index 0000000..bad669e Binary files /dev/null and b/dist/images/creatures/Feral Dinosaur#Normal.png differ diff --git a/dist/images/creatures/Feral vampyre#Spider.png b/dist/images/creatures/Feral vampyre#Spider.png new file mode 100644 index 0000000..bd19b83 Binary files /dev/null and b/dist/images/creatures/Feral vampyre#Spider.png differ diff --git a/dist/images/creatures/Feral vampyre#Standard.png b/dist/images/creatures/Feral vampyre#Standard.png new file mode 100644 index 0000000..bd19b83 Binary files /dev/null and b/dist/images/creatures/Feral vampyre#Standard.png differ diff --git a/dist/images/creatures/Fetid zombie#1.png b/dist/images/creatures/Fetid zombie#1.png new file mode 100644 index 0000000..dd6a9f3 Binary files /dev/null and b/dist/images/creatures/Fetid zombie#1.png differ diff --git a/dist/images/creatures/Fetid zombie#2.png b/dist/images/creatures/Fetid zombie#2.png new file mode 100644 index 0000000..ffdac9d Binary files /dev/null and b/dist/images/creatures/Fetid zombie#2.png differ diff --git a/dist/images/creatures/Fever spider#Default.png b/dist/images/creatures/Fever spider#Default.png new file mode 100644 index 0000000..2c29478 Binary files /dev/null and b/dist/images/creatures/Fever spider#Default.png differ diff --git a/dist/images/creatures/Fire giant#Default.png b/dist/images/creatures/Fire giant#Default.png new file mode 100644 index 0000000..cd2fc9b Binary files /dev/null and b/dist/images/creatures/Fire giant#Default.png differ diff --git a/dist/images/creatures/Flesh Crawler#Default.png b/dist/images/creatures/Flesh Crawler#Default.png new file mode 100644 index 0000000..861e248 Binary files /dev/null and b/dist/images/creatures/Flesh Crawler#Default.png differ diff --git a/dist/images/creatures/Flight Kilisa#Default.png b/dist/images/creatures/Flight Kilisa#Default.png new file mode 100644 index 0000000..f8aec2c Binary files /dev/null and b/dist/images/creatures/Flight Kilisa#Default.png differ diff --git a/dist/images/creatures/Flockleader Geerin#Default.png b/dist/images/creatures/Flockleader Geerin#Default.png new file mode 100644 index 0000000..34e17de Binary files /dev/null and b/dist/images/creatures/Flockleader Geerin#Default.png differ diff --git a/dist/images/creatures/Force muspah#Default.png b/dist/images/creatures/Force muspah#Default.png new file mode 100644 index 0000000..651f5bb Binary files /dev/null and b/dist/images/creatures/Force muspah#Default.png differ diff --git a/dist/images/creatures/Frog#Default.png b/dist/images/creatures/Frog#Default.png new file mode 100644 index 0000000..7f78675 Binary files /dev/null and b/dist/images/creatures/Frog#Default.png differ diff --git a/dist/images/creatures/Frogeel#Default.png b/dist/images/creatures/Frogeel#Default.png new file mode 100644 index 0000000..cbde221 Binary files /dev/null and b/dist/images/creatures/Frogeel#Default.png differ diff --git a/dist/images/creatures/Frost dragon#Default.png b/dist/images/creatures/Frost dragon#Default.png new file mode 100644 index 0000000..8c6c579 Binary files /dev/null and b/dist/images/creatures/Frost dragon#Default.png differ diff --git a/dist/images/creatures/Fungal mage#Normal.png b/dist/images/creatures/Fungal mage#Normal.png new file mode 100644 index 0000000..9b20fab Binary files /dev/null and b/dist/images/creatures/Fungal mage#Normal.png differ diff --git a/dist/images/creatures/Fungal mage#Weakened.png b/dist/images/creatures/Fungal mage#Weakened.png new file mode 100644 index 0000000..d5b38b6 Binary files /dev/null and b/dist/images/creatures/Fungal mage#Weakened.png differ diff --git a/dist/images/creatures/Ganodermic beast#Neem oil.png b/dist/images/creatures/Ganodermic beast#Neem oil.png new file mode 100644 index 0000000..acae4dc Binary files /dev/null and b/dist/images/creatures/Ganodermic beast#Neem oil.png differ diff --git a/dist/images/creatures/Ganodermic beast#Normal.png b/dist/images/creatures/Ganodermic beast#Normal.png new file mode 100644 index 0000000..4703238 Binary files /dev/null and b/dist/images/creatures/Ganodermic beast#Normal.png differ diff --git a/dist/images/creatures/Ganodermic runt#Neem oil.png b/dist/images/creatures/Ganodermic runt#Neem oil.png new file mode 100644 index 0000000..5f4ff37 Binary files /dev/null and b/dist/images/creatures/Ganodermic runt#Neem oil.png differ diff --git a/dist/images/creatures/Ganodermic runt#Normal.png b/dist/images/creatures/Ganodermic runt#Normal.png new file mode 100644 index 0000000..9f70a8e Binary files /dev/null and b/dist/images/creatures/Ganodermic runt#Normal.png differ diff --git a/dist/images/creatures/Gargoyle#Regular.png b/dist/images/creatures/Gargoyle#Regular.png new file mode 100644 index 0000000..f2c834f Binary files /dev/null and b/dist/images/creatures/Gargoyle#Regular.png differ diff --git a/dist/images/creatures/Gargoyle#Wilderness.png b/dist/images/creatures/Gargoyle#Wilderness.png new file mode 100644 index 0000000..f2c834f Binary files /dev/null and b/dist/images/creatures/Gargoyle#Wilderness.png differ diff --git a/dist/images/creatures/Gelatinous abomination#Default.png b/dist/images/creatures/Gelatinous abomination#Default.png new file mode 100644 index 0000000..08f6dca Binary files /dev/null and b/dist/images/creatures/Gelatinous abomination#Default.png differ diff --git a/dist/images/creatures/General Graardor#Hard mode.png b/dist/images/creatures/General Graardor#Hard mode.png new file mode 100644 index 0000000..5d4d81a Binary files /dev/null and b/dist/images/creatures/General Graardor#Hard mode.png differ diff --git a/dist/images/creatures/General Graardor#Normal.png b/dist/images/creatures/General Graardor#Normal.png new file mode 100644 index 0000000..5d4d81a Binary files /dev/null and b/dist/images/creatures/General Graardor#Normal.png differ diff --git a/dist/images/creatures/General Graardor#The Mighty Fall.png b/dist/images/creatures/General Graardor#The Mighty Fall.png new file mode 100644 index 0000000..e4f331e Binary files /dev/null and b/dist/images/creatures/General Graardor#The Mighty Fall.png differ diff --git a/dist/images/creatures/General Graardor#The World Wakes.png b/dist/images/creatures/General Graardor#The World Wakes.png new file mode 100644 index 0000000..5d4d81a Binary files /dev/null and b/dist/images/creatures/General Graardor#The World Wakes.png differ diff --git a/dist/images/creatures/General malpractitioner#Default.png b/dist/images/creatures/General malpractitioner#Default.png new file mode 100644 index 0000000..1d9266f Binary files /dev/null and b/dist/images/creatures/General malpractitioner#Default.png differ diff --git a/dist/images/creatures/Ghast#Regular.png b/dist/images/creatures/Ghast#Regular.png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/dist/images/creatures/Ghast#Regular.png differ diff --git a/dist/images/creatures/Ghast#Temple Trekking (Easy Route).png b/dist/images/creatures/Ghast#Temple Trekking (Easy Route).png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/dist/images/creatures/Ghast#Temple Trekking (Easy Route).png differ diff --git a/dist/images/creatures/Ghast#Temple Trekking (Hard Route).png b/dist/images/creatures/Ghast#Temple Trekking (Hard Route).png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/dist/images/creatures/Ghast#Temple Trekking (Hard Route).png differ diff --git a/dist/images/creatures/Ghast#Temple Trekking (Medium Route).png b/dist/images/creatures/Ghast#Temple Trekking (Medium Route).png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/dist/images/creatures/Ghast#Temple Trekking (Medium Route).png differ diff --git a/dist/images/creatures/Ghost (Abandoned Mine)#Default.png b/dist/images/creatures/Ghost (Abandoned Mine)#Default.png new file mode 100644 index 0000000..e040187 Binary files /dev/null and b/dist/images/creatures/Ghost (Abandoned Mine)#Default.png differ diff --git a/dist/images/creatures/Ghost (Stronghold of Security)#1.png b/dist/images/creatures/Ghost (Stronghold of Security)#1.png new file mode 100644 index 0000000..1735985 Binary files /dev/null and b/dist/images/creatures/Ghost (Stronghold of Security)#1.png differ diff --git a/dist/images/creatures/Ghost (Stronghold of Security)#2.png b/dist/images/creatures/Ghost (Stronghold of Security)#2.png new file mode 100644 index 0000000..9b4f956 Binary files /dev/null and b/dist/images/creatures/Ghost (Stronghold of Security)#2.png differ diff --git a/dist/images/creatures/Ghost (Stronghold of Security)#3.png b/dist/images/creatures/Ghost (Stronghold of Security)#3.png new file mode 100644 index 0000000..534f8f2 Binary files /dev/null and b/dist/images/creatures/Ghost (Stronghold of Security)#3.png differ diff --git a/dist/images/creatures/Ghost (Stronghold of Security)#4.png b/dist/images/creatures/Ghost (Stronghold of Security)#4.png new file mode 100644 index 0000000..f59ae03 Binary files /dev/null and b/dist/images/creatures/Ghost (Stronghold of Security)#4.png differ diff --git a/dist/images/creatures/Ghost (Stronghold of Security)#5.png b/dist/images/creatures/Ghost (Stronghold of Security)#5.png new file mode 100644 index 0000000..b41186e Binary files /dev/null and b/dist/images/creatures/Ghost (Stronghold of Security)#5.png differ diff --git a/dist/images/creatures/Ghost#1.png b/dist/images/creatures/Ghost#1.png new file mode 100644 index 0000000..03170a4 Binary files /dev/null and b/dist/images/creatures/Ghost#1.png differ diff --git a/dist/images/creatures/Ghost#2.png b/dist/images/creatures/Ghost#2.png new file mode 100644 index 0000000..7860854 Binary files /dev/null and b/dist/images/creatures/Ghost#2.png differ diff --git a/dist/images/creatures/Ghost#3.png b/dist/images/creatures/Ghost#3.png new file mode 100644 index 0000000..03170a4 Binary files /dev/null and b/dist/images/creatures/Ghost#3.png differ diff --git a/dist/images/creatures/Ghost#4.png b/dist/images/creatures/Ghost#4.png new file mode 100644 index 0000000..1155b09 Binary files /dev/null and b/dist/images/creatures/Ghost#4.png differ diff --git a/dist/images/creatures/Ghost#5.png b/dist/images/creatures/Ghost#5.png new file mode 100644 index 0000000..8bc47f2 Binary files /dev/null and b/dist/images/creatures/Ghost#5.png differ diff --git a/dist/images/creatures/Ghost#6.png b/dist/images/creatures/Ghost#6.png new file mode 100644 index 0000000..6a0b02f Binary files /dev/null and b/dist/images/creatures/Ghost#6.png differ diff --git a/dist/images/creatures/Ghost#7.png b/dist/images/creatures/Ghost#7.png new file mode 100644 index 0000000..9ab5b66 Binary files /dev/null and b/dist/images/creatures/Ghost#7.png differ diff --git a/dist/images/creatures/Ghostly troll bruiser#Default.png b/dist/images/creatures/Ghostly troll bruiser#Default.png new file mode 100644 index 0000000..bc1b2dc Binary files /dev/null and b/dist/images/creatures/Ghostly troll bruiser#Default.png differ diff --git a/dist/images/creatures/Ghostly troll thrower#Default.png b/dist/images/creatures/Ghostly troll thrower#Default.png new file mode 100644 index 0000000..0134d14 Binary files /dev/null and b/dist/images/creatures/Ghostly troll thrower#Default.png differ diff --git a/dist/images/creatures/Ghostly warrior#Default.png b/dist/images/creatures/Ghostly warrior#Default.png new file mode 100644 index 0000000..c834c71 Binary files /dev/null and b/dist/images/creatures/Ghostly warrior#Default.png differ diff --git a/dist/images/creatures/Ghoul (Paterdomus)#Default.png b/dist/images/creatures/Ghoul (Paterdomus)#Default.png new file mode 100644 index 0000000..b5653ad Binary files /dev/null and b/dist/images/creatures/Ghoul (Paterdomus)#Default.png differ diff --git a/dist/images/creatures/Ghoul#Blue.png b/dist/images/creatures/Ghoul#Blue.png new file mode 100644 index 0000000..e10fc77 Binary files /dev/null and b/dist/images/creatures/Ghoul#Blue.png differ diff --git a/dist/images/creatures/Ghoul#Brown.png b/dist/images/creatures/Ghoul#Brown.png new file mode 100644 index 0000000..b5653ad Binary files /dev/null and b/dist/images/creatures/Ghoul#Brown.png differ diff --git a/dist/images/creatures/Giant bat#Brine Cavern.png b/dist/images/creatures/Giant bat#Brine Cavern.png new file mode 100644 index 0000000..c7b5694 Binary files /dev/null and b/dist/images/creatures/Giant bat#Brine Cavern.png differ diff --git a/dist/images/creatures/Giant bat#Normal.png b/dist/images/creatures/Giant bat#Normal.png new file mode 100644 index 0000000..d8c406c Binary files /dev/null and b/dist/images/creatures/Giant bat#Normal.png differ diff --git a/dist/images/creatures/Giant crypt rat#Default.png b/dist/images/creatures/Giant crypt rat#Default.png new file mode 100644 index 0000000..4085cb3 Binary files /dev/null and b/dist/images/creatures/Giant crypt rat#Default.png differ diff --git a/dist/images/creatures/Giant crypt spider#Default.png b/dist/images/creatures/Giant crypt spider#Default.png new file mode 100644 index 0000000..782a11d Binary files /dev/null and b/dist/images/creatures/Giant crypt spider#Default.png differ diff --git a/dist/images/creatures/Giant frog#Default.png b/dist/images/creatures/Giant frog#Default.png new file mode 100644 index 0000000..5054b8b Binary files /dev/null and b/dist/images/creatures/Giant frog#Default.png differ diff --git a/dist/images/creatures/Giant mole#Hard Mode.png b/dist/images/creatures/Giant mole#Hard Mode.png new file mode 100644 index 0000000..4c27a90 Binary files /dev/null and b/dist/images/creatures/Giant mole#Hard Mode.png differ diff --git a/dist/images/creatures/Giant mole#Normal.png b/dist/images/creatures/Giant mole#Normal.png new file mode 100644 index 0000000..4c27a90 Binary files /dev/null and b/dist/images/creatures/Giant mole#Normal.png differ diff --git a/dist/images/creatures/Giant rat#Level 7 (brown).png b/dist/images/creatures/Giant rat#Level 7 (brown).png new file mode 100644 index 0000000..8cba6e8 Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 7 (brown).png differ diff --git a/dist/images/creatures/Giant rat#Level 7 (brown, arrows).png b/dist/images/creatures/Giant rat#Level 7 (brown, arrows).png new file mode 100644 index 0000000..841acf8 Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 7 (brown, arrows).png differ diff --git a/dist/images/creatures/Giant rat#Level 7 (grey).png b/dist/images/creatures/Giant rat#Level 7 (grey).png new file mode 100644 index 0000000..fbdf779 Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 7 (grey).png differ diff --git a/dist/images/creatures/Giant rat#Level 7 (grey, arrows).png b/dist/images/creatures/Giant rat#Level 7 (grey, arrows).png new file mode 100644 index 0000000..b959c9f Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 7 (grey, arrows).png differ diff --git a/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 1).png b/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 1).png new file mode 100644 index 0000000..cf539d2 Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 1).png differ diff --git a/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 2).png b/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 2).png new file mode 100644 index 0000000..8ffc2d8 Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 2).png differ diff --git a/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 3).png b/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 3).png new file mode 100644 index 0000000..69f057d Binary files /dev/null and b/dist/images/creatures/Giant rat#Level 9 (Stronghold of Security, 3).png differ diff --git a/dist/images/creatures/Giant skeleton (Shadow Dungeon)#Default.png b/dist/images/creatures/Giant skeleton (Shadow Dungeon)#Default.png new file mode 100644 index 0000000..b7d4b82 Binary files /dev/null and b/dist/images/creatures/Giant skeleton (Shadow Dungeon)#Default.png differ diff --git a/dist/images/creatures/Giant skeleton (Tarn's Lair)#Default.png b/dist/images/creatures/Giant skeleton (Tarn's Lair)#Default.png new file mode 100644 index 0000000..b7d4b82 Binary files /dev/null and b/dist/images/creatures/Giant skeleton (Tarn's Lair)#Default.png differ diff --git a/dist/images/creatures/Giant slime#Normal mode.png b/dist/images/creatures/Giant slime#Normal mode.png new file mode 100644 index 0000000..4341deb Binary files /dev/null and b/dist/images/creatures/Giant slime#Normal mode.png differ diff --git a/dist/images/creatures/Giant slime#Story mode.png b/dist/images/creatures/Giant slime#Story mode.png new file mode 100644 index 0000000..4341deb Binary files /dev/null and b/dist/images/creatures/Giant slime#Story mode.png differ diff --git a/dist/images/creatures/Giant spider#Level 2.png b/dist/images/creatures/Giant spider#Level 2.png new file mode 100644 index 0000000..c822f74 Binary files /dev/null and b/dist/images/creatures/Giant spider#Level 2.png differ diff --git a/dist/images/creatures/Giant spider#Level 29.png b/dist/images/creatures/Giant spider#Level 29.png new file mode 100644 index 0000000..6317dd8 Binary files /dev/null and b/dist/images/creatures/Giant spider#Level 29.png differ diff --git a/dist/images/creatures/Giant spider#Level 33.png b/dist/images/creatures/Giant spider#Level 33.png new file mode 100644 index 0000000..c822f74 Binary files /dev/null and b/dist/images/creatures/Giant spider#Level 33.png differ diff --git a/dist/images/creatures/Giant worm#Default.png b/dist/images/creatures/Giant worm#Default.png new file mode 100644 index 0000000..b6bea35 Binary files /dev/null and b/dist/images/creatures/Giant worm#Default.png differ diff --git a/dist/images/creatures/Glacor#Default.png b/dist/images/creatures/Glacor#Default.png new file mode 100644 index 0000000..8fb2071 Binary files /dev/null and b/dist/images/creatures/Glacor#Default.png differ diff --git a/dist/images/creatures/Glacyte (Arch-Glacor)#Magic.png b/dist/images/creatures/Glacyte (Arch-Glacor)#Magic.png new file mode 100644 index 0000000..95d4823 Binary files /dev/null and b/dist/images/creatures/Glacyte (Arch-Glacor)#Magic.png differ diff --git a/dist/images/creatures/Glacyte (Arch-Glacor)#Melee.png b/dist/images/creatures/Glacyte (Arch-Glacor)#Melee.png new file mode 100644 index 0000000..743fbb5 Binary files /dev/null and b/dist/images/creatures/Glacyte (Arch-Glacor)#Melee.png differ diff --git a/dist/images/creatures/Glacyte#Magic.png b/dist/images/creatures/Glacyte#Magic.png new file mode 100644 index 0000000..95d4823 Binary files /dev/null and b/dist/images/creatures/Glacyte#Magic.png differ diff --git a/dist/images/creatures/Glacyte#Melee.png b/dist/images/creatures/Glacyte#Melee.png new file mode 100644 index 0000000..743fbb5 Binary files /dev/null and b/dist/images/creatures/Glacyte#Melee.png differ diff --git a/dist/images/creatures/Gladius#Default.png b/dist/images/creatures/Gladius#Default.png new file mode 100644 index 0000000..16890db Binary files /dev/null and b/dist/images/creatures/Gladius#Default.png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Green (1).png b/dist/images/creatures/Goblin (Goblin Village)#Green (1).png new file mode 100644 index 0000000..b66acc3 Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Green (1).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Green (2).png b/dist/images/creatures/Goblin (Goblin Village)#Green (2).png new file mode 100644 index 0000000..d89c832 Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Green (2).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Green (3).png b/dist/images/creatures/Goblin (Goblin Village)#Green (3).png new file mode 100644 index 0000000..3e86842 Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Green (3).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Green (4).png b/dist/images/creatures/Goblin (Goblin Village)#Green (4).png new file mode 100644 index 0000000..477231c Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Green (4).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Green (5).png b/dist/images/creatures/Goblin (Goblin Village)#Green (5).png new file mode 100644 index 0000000..320dc3d Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Green (5).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Green (6).png b/dist/images/creatures/Goblin (Goblin Village)#Green (6).png new file mode 100644 index 0000000..8fec78e Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Green (6).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Red (1).png b/dist/images/creatures/Goblin (Goblin Village)#Red (1).png new file mode 100644 index 0000000..0a5502e Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Red (1).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Red (2).png b/dist/images/creatures/Goblin (Goblin Village)#Red (2).png new file mode 100644 index 0000000..9b9125d Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Red (2).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Red (3).png b/dist/images/creatures/Goblin (Goblin Village)#Red (3).png new file mode 100644 index 0000000..bbc8650 Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Red (3).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Red (4).png b/dist/images/creatures/Goblin (Goblin Village)#Red (4).png new file mode 100644 index 0000000..34b4b74 Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Red (4).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Red (5).png b/dist/images/creatures/Goblin (Goblin Village)#Red (5).png new file mode 100644 index 0000000..ea6f18b Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Red (5).png differ diff --git a/dist/images/creatures/Goblin (Goblin Village)#Red (6).png b/dist/images/creatures/Goblin (Goblin Village)#Red (6).png new file mode 100644 index 0000000..25cd3c8 Binary files /dev/null and b/dist/images/creatures/Goblin (Goblin Village)#Red (6).png differ diff --git a/dist/images/creatures/Goblin (God Wars Dungeon)#Banner.png b/dist/images/creatures/Goblin (God Wars Dungeon)#Banner.png new file mode 100644 index 0000000..ed25efc Binary files /dev/null and b/dist/images/creatures/Goblin (God Wars Dungeon)#Banner.png differ diff --git a/dist/images/creatures/Goblin (God Wars Dungeon)#Battleaxe.png b/dist/images/creatures/Goblin (God Wars Dungeon)#Battleaxe.png new file mode 100644 index 0000000..daf082f Binary files /dev/null and b/dist/images/creatures/Goblin (God Wars Dungeon)#Battleaxe.png differ diff --git a/dist/images/creatures/Goblin (God Wars Dungeon)#Spear.png b/dist/images/creatures/Goblin (God Wars Dungeon)#Spear.png new file mode 100644 index 0000000..3dc5536 Binary files /dev/null and b/dist/images/creatures/Goblin (God Wars Dungeon)#Spear.png differ diff --git a/dist/images/creatures/Goblin (God Wars Dungeon)#Sword.png b/dist/images/creatures/Goblin (God Wars Dungeon)#Sword.png new file mode 100644 index 0000000..dc9d0d5 Binary files /dev/null and b/dist/images/creatures/Goblin (God Wars Dungeon)#Sword.png differ diff --git a/dist/images/creatures/Goblin (God Wars Dungeon)#Warhammer.png b/dist/images/creatures/Goblin (God Wars Dungeon)#Warhammer.png new file mode 100644 index 0000000..a2ce0e5 Binary files /dev/null and b/dist/images/creatures/Goblin (God Wars Dungeon)#Warhammer.png differ diff --git a/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (a).png b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (a).png new file mode 100644 index 0000000..e67def4 Binary files /dev/null and b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (a).png differ diff --git a/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (b).png b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (b).png new file mode 100644 index 0000000..f725001 Binary files /dev/null and b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (b).png differ diff --git a/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (c).png b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (c).png new file mode 100644 index 0000000..566196c Binary files /dev/null and b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (c).png differ diff --git a/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (d).png b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (d).png new file mode 100644 index 0000000..b08ec18 Binary files /dev/null and b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (d).png differ diff --git a/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (e).png b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (e).png new file mode 100644 index 0000000..408e631 Binary files /dev/null and b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (e).png differ diff --git a/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (f).png b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (f).png new file mode 100644 index 0000000..9e9f1d8 Binary files /dev/null and b/dist/images/creatures/Goblin (Stronghold of Security)#Level 5 (f).png differ diff --git a/dist/images/creatures/Goblin#Level 1 (Slayer challenge).png b/dist/images/creatures/Goblin#Level 1 (Slayer challenge).png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/dist/images/creatures/Goblin#Level 1 (Slayer challenge).png differ diff --git a/dist/images/creatures/Goblin#Level 11 (Slayer challenge).png b/dist/images/creatures/Goblin#Level 11 (Slayer challenge).png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/dist/images/creatures/Goblin#Level 11 (Slayer challenge).png differ diff --git a/dist/images/creatures/Goblin#Level 11.png b/dist/images/creatures/Goblin#Level 11.png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/dist/images/creatures/Goblin#Level 11.png differ diff --git a/dist/images/creatures/Goblin#Level 2.png b/dist/images/creatures/Goblin#Level 2.png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/dist/images/creatures/Goblin#Level 2.png differ diff --git a/dist/images/creatures/Goblin#Level 5 (Slayer challenge).png b/dist/images/creatures/Goblin#Level 5 (Slayer challenge).png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/dist/images/creatures/Goblin#Level 5 (Slayer challenge).png differ diff --git a/dist/images/creatures/Goblin#Level 5.png b/dist/images/creatures/Goblin#Level 5.png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/dist/images/creatures/Goblin#Level 5.png differ diff --git a/dist/images/creatures/Gorak#God Wars Dungeon.png b/dist/images/creatures/Gorak#God Wars Dungeon.png new file mode 100644 index 0000000..68c3868 Binary files /dev/null and b/dist/images/creatures/Gorak#God Wars Dungeon.png differ diff --git a/dist/images/creatures/Gorak#Gorak Plane.png b/dist/images/creatures/Gorak#Gorak Plane.png new file mode 100644 index 0000000..68c3868 Binary files /dev/null and b/dist/images/creatures/Gorak#Gorak Plane.png differ diff --git a/dist/images/creatures/Gorak#The World Wakes.png b/dist/images/creatures/Gorak#The World Wakes.png new file mode 100644 index 0000000..68c3868 Binary files /dev/null and b/dist/images/creatures/Gorak#The World Wakes.png differ diff --git a/dist/images/creatures/Gorilla akh#Default.png b/dist/images/creatures/Gorilla akh#Default.png new file mode 100644 index 0000000..1d5efc1 Binary files /dev/null and b/dist/images/creatures/Gorilla akh#Default.png differ diff --git a/dist/images/creatures/Grave scorpion#Default.png b/dist/images/creatures/Grave scorpion#Default.png new file mode 100644 index 0000000..b4a25f9 Binary files /dev/null and b/dist/images/creatures/Grave scorpion#Default.png differ diff --git a/dist/images/creatures/Graveside Phantom#Default.png b/dist/images/creatures/Graveside Phantom#Default.png new file mode 100644 index 0000000..f6efc25 Binary files /dev/null and b/dist/images/creatures/Graveside Phantom#Default.png differ diff --git a/dist/images/creatures/Greater demon (elite)#Default.png b/dist/images/creatures/Greater demon (elite)#Default.png new file mode 100644 index 0000000..d0acd38 Binary files /dev/null and b/dist/images/creatures/Greater demon (elite)#Default.png differ diff --git a/dist/images/creatures/Greater demon ash lord#The Zamorakian Undercity.png b/dist/images/creatures/Greater demon ash lord#The Zamorakian Undercity.png new file mode 100644 index 0000000..d0acd38 Binary files /dev/null and b/dist/images/creatures/Greater demon ash lord#The Zamorakian Undercity.png differ diff --git a/dist/images/creatures/Greater demon ash lord#Wilderness.png b/dist/images/creatures/Greater demon ash lord#Wilderness.png new file mode 100644 index 0000000..d0acd38 Binary files /dev/null and b/dist/images/creatures/Greater demon ash lord#Wilderness.png differ diff --git a/dist/images/creatures/Greater demon berserker#The Zamorakian Undercity.png b/dist/images/creatures/Greater demon berserker#The Zamorakian Undercity.png new file mode 100644 index 0000000..82c4105 Binary files /dev/null and b/dist/images/creatures/Greater demon berserker#The Zamorakian Undercity.png differ diff --git a/dist/images/creatures/Greater demon berserker#Wilderness.png b/dist/images/creatures/Greater demon berserker#Wilderness.png new file mode 100644 index 0000000..82c4105 Binary files /dev/null and b/dist/images/creatures/Greater demon berserker#Wilderness.png differ diff --git a/dist/images/creatures/Greater demon brute#Default.png b/dist/images/creatures/Greater demon brute#Default.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/dist/images/creatures/Greater demon brute#Default.png differ diff --git a/dist/images/creatures/Greater demon pyromancer#The Zamorakian Undercity.png b/dist/images/creatures/Greater demon pyromancer#The Zamorakian Undercity.png new file mode 100644 index 0000000..469a9d3 Binary files /dev/null and b/dist/images/creatures/Greater demon pyromancer#The Zamorakian Undercity.png differ diff --git a/dist/images/creatures/Greater demon pyromancer#Wilderness.png b/dist/images/creatures/Greater demon pyromancer#Wilderness.png new file mode 100644 index 0000000..469a9d3 Binary files /dev/null and b/dist/images/creatures/Greater demon pyromancer#Wilderness.png differ diff --git a/dist/images/creatures/Greater demon sage#Default.png b/dist/images/creatures/Greater demon sage#Default.png new file mode 100644 index 0000000..6d29c16 Binary files /dev/null and b/dist/images/creatures/Greater demon sage#Default.png differ diff --git a/dist/images/creatures/Greater demon savage#Default.png b/dist/images/creatures/Greater demon savage#Default.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/dist/images/creatures/Greater demon savage#Default.png differ diff --git a/dist/images/creatures/Greater demon#1.png b/dist/images/creatures/Greater demon#1.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/dist/images/creatures/Greater demon#1.png differ diff --git a/dist/images/creatures/Greater demon#2.png b/dist/images/creatures/Greater demon#2.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/dist/images/creatures/Greater demon#2.png differ diff --git a/dist/images/creatures/Greater demon#3.png b/dist/images/creatures/Greater demon#3.png new file mode 100644 index 0000000..82c4105 Binary files /dev/null and b/dist/images/creatures/Greater demon#3.png differ diff --git a/dist/images/creatures/Greater demon#4.png b/dist/images/creatures/Greater demon#4.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/dist/images/creatures/Greater demon#4.png differ diff --git a/dist/images/creatures/Greater demon#5.png b/dist/images/creatures/Greater demon#5.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/dist/images/creatures/Greater demon#5.png differ diff --git a/dist/images/creatures/Green dragon#1.png b/dist/images/creatures/Green dragon#1.png new file mode 100644 index 0000000..6427cdd Binary files /dev/null and b/dist/images/creatures/Green dragon#1.png differ diff --git a/dist/images/creatures/Green dragon#2.png b/dist/images/creatures/Green dragon#2.png new file mode 100644 index 0000000..75da7d5 Binary files /dev/null and b/dist/images/creatures/Green dragon#2.png differ diff --git a/dist/images/creatures/Green dragon#3.png b/dist/images/creatures/Green dragon#3.png new file mode 100644 index 0000000..608b97a Binary files /dev/null and b/dist/images/creatures/Green dragon#3.png differ diff --git a/dist/images/creatures/Green dragon#4.png b/dist/images/creatures/Green dragon#4.png new file mode 100644 index 0000000..f9d58d2 Binary files /dev/null and b/dist/images/creatures/Green dragon#4.png differ diff --git a/dist/images/creatures/Green dragon#5.png b/dist/images/creatures/Green dragon#5.png new file mode 100644 index 0000000..b069f74 Binary files /dev/null and b/dist/images/creatures/Green dragon#5.png differ diff --git a/dist/images/creatures/Gregorovic#Challenge Mode.png b/dist/images/creatures/Gregorovic#Challenge Mode.png new file mode 100644 index 0000000..0148046 Binary files /dev/null and b/dist/images/creatures/Gregorovic#Challenge Mode.png differ diff --git a/dist/images/creatures/Gregorovic#Normal Mode.png b/dist/images/creatures/Gregorovic#Normal Mode.png new file mode 100644 index 0000000..0148046 Binary files /dev/null and b/dist/images/creatures/Gregorovic#Normal Mode.png differ diff --git a/dist/images/creatures/Gregorovic#Sliske's Endgame.png b/dist/images/creatures/Gregorovic#Sliske's Endgame.png new file mode 100644 index 0000000..0148046 Binary files /dev/null and b/dist/images/creatures/Gregorovic#Sliske's Endgame.png differ diff --git a/dist/images/creatures/Grifolapine#Neem oil.png b/dist/images/creatures/Grifolapine#Neem oil.png new file mode 100644 index 0000000..41076a7 Binary files /dev/null and b/dist/images/creatures/Grifolapine#Neem oil.png differ diff --git a/dist/images/creatures/Grifolapine#Normal.png b/dist/images/creatures/Grifolapine#Normal.png new file mode 100644 index 0000000..b3b8e6e Binary files /dev/null and b/dist/images/creatures/Grifolapine#Normal.png differ diff --git a/dist/images/creatures/Grifolaroo#Neem oil.png b/dist/images/creatures/Grifolaroo#Neem oil.png new file mode 100644 index 0000000..9c55e8a Binary files /dev/null and b/dist/images/creatures/Grifolaroo#Neem oil.png differ diff --git a/dist/images/creatures/Grifolaroo#Normal.png b/dist/images/creatures/Grifolaroo#Normal.png new file mode 100644 index 0000000..159f5c5 Binary files /dev/null and b/dist/images/creatures/Grifolaroo#Normal.png differ diff --git a/dist/images/creatures/Grizzly bear cub#Default.png b/dist/images/creatures/Grizzly bear cub#Default.png new file mode 100644 index 0000000..1044909 Binary files /dev/null and b/dist/images/creatures/Grizzly bear cub#Default.png differ diff --git a/dist/images/creatures/Grizzly bear#Standard.png b/dist/images/creatures/Grizzly bear#Standard.png new file mode 100644 index 0000000..fc8b0f4 Binary files /dev/null and b/dist/images/creatures/Grizzly bear#Standard.png differ diff --git a/dist/images/creatures/Grizzly bear#Tirannwn.png b/dist/images/creatures/Grizzly bear#Tirannwn.png new file mode 100644 index 0000000..fc8b0f4 Binary files /dev/null and b/dist/images/creatures/Grizzly bear#Tirannwn.png differ diff --git a/dist/images/creatures/Grotworm#Default.png b/dist/images/creatures/Grotworm#Default.png new file mode 100644 index 0000000..b6bea35 Binary files /dev/null and b/dist/images/creatures/Grotworm#Default.png differ diff --git a/dist/images/creatures/Guard (cave goblin)#Club.png b/dist/images/creatures/Guard (cave goblin)#Club.png new file mode 100644 index 0000000..1bd53d4 Binary files /dev/null and b/dist/images/creatures/Guard (cave goblin)#Club.png differ diff --git a/dist/images/creatures/Guard (cave goblin)#Spear.png b/dist/images/creatures/Guard (cave goblin)#Spear.png new file mode 100644 index 0000000..d15831b Binary files /dev/null and b/dist/images/creatures/Guard (cave goblin)#Spear.png differ diff --git a/dist/images/creatures/Guard dog#Default.png b/dist/images/creatures/Guard dog#Default.png new file mode 100644 index 0000000..fa5eb54 Binary files /dev/null and b/dist/images/creatures/Guard dog#Default.png differ diff --git a/dist/images/creatures/Guthan the Infested#Normal.png b/dist/images/creatures/Guthan the Infested#Normal.png new file mode 100644 index 0000000..99b8492 Binary files /dev/null and b/dist/images/creatures/Guthan the Infested#Normal.png differ diff --git a/dist/images/creatures/Guthan the Infested#Rise of the Six.png b/dist/images/creatures/Guthan the Infested#Rise of the Six.png new file mode 100644 index 0000000..aa8e456 Binary files /dev/null and b/dist/images/creatures/Guthan the Infested#Rise of the Six.png differ diff --git a/dist/images/creatures/Guthan the Infested#Ritual of the Mahjarrat.png b/dist/images/creatures/Guthan the Infested#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..99b8492 Binary files /dev/null and b/dist/images/creatures/Guthan the Infested#Ritual of the Mahjarrat.png differ diff --git a/dist/images/creatures/Har-Aken#Head.png b/dist/images/creatures/Har-Aken#Head.png new file mode 100644 index 0000000..2519191 Binary files /dev/null and b/dist/images/creatures/Har-Aken#Head.png differ diff --git a/dist/images/creatures/Har-Aken#Magic Tentacle.png b/dist/images/creatures/Har-Aken#Magic Tentacle.png new file mode 100644 index 0000000..a60d5dd Binary files /dev/null and b/dist/images/creatures/Har-Aken#Magic Tentacle.png differ diff --git a/dist/images/creatures/Har-Aken#Ranged Tentacle.png b/dist/images/creatures/Har-Aken#Ranged Tentacle.png new file mode 100644 index 0000000..4dbdb04 Binary files /dev/null and b/dist/images/creatures/Har-Aken#Ranged Tentacle.png differ diff --git a/dist/images/creatures/Harpie Bug Swarm (elite)#Default.png b/dist/images/creatures/Harpie Bug Swarm (elite)#Default.png new file mode 100644 index 0000000..676de93 Binary files /dev/null and b/dist/images/creatures/Harpie Bug Swarm (elite)#Default.png differ diff --git a/dist/images/creatures/Harpie Bug Swarm#Default.png b/dist/images/creatures/Harpie Bug Swarm#Default.png new file mode 100644 index 0000000..676de93 Binary files /dev/null and b/dist/images/creatures/Harpie Bug Swarm#Default.png differ diff --git a/dist/images/creatures/Hellhound (Heart of Gielinor)#Default.png b/dist/images/creatures/Hellhound (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound (Heart of Gielinor)#Default.png differ diff --git a/dist/images/creatures/Hellhound (The Zamorakian Undercity)#Default.png b/dist/images/creatures/Hellhound (The Zamorakian Undercity)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound (The Zamorakian Undercity)#Default.png differ diff --git a/dist/images/creatures/Hellhound (summoned)#Default.png b/dist/images/creatures/Hellhound (summoned)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound (summoned)#Default.png differ diff --git a/dist/images/creatures/Hellhound Alpha#Default.png b/dist/images/creatures/Hellhound Alpha#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound Alpha#Default.png differ diff --git a/dist/images/creatures/Hellhound Hunter (summoned)#Default.png b/dist/images/creatures/Hellhound Hunter (summoned)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound Hunter (summoned)#Default.png differ diff --git a/dist/images/creatures/Hellhound Hunter#Default.png b/dist/images/creatures/Hellhound Hunter#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound Hunter#Default.png differ diff --git a/dist/images/creatures/Hellhound#God Wars Dungeon.png b/dist/images/creatures/Hellhound#God Wars Dungeon.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound#God Wars Dungeon.png differ diff --git a/dist/images/creatures/Hellhound#Level 105.png b/dist/images/creatures/Hellhound#Level 105.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound#Level 105.png differ diff --git a/dist/images/creatures/Hellhound#Normal.png b/dist/images/creatures/Hellhound#Normal.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/dist/images/creatures/Hellhound#Normal.png differ diff --git a/dist/images/creatures/Helwyr#Challenge Mode.png b/dist/images/creatures/Helwyr#Challenge Mode.png new file mode 100644 index 0000000..1cd8db5 Binary files /dev/null and b/dist/images/creatures/Helwyr#Challenge Mode.png differ diff --git a/dist/images/creatures/Helwyr#Normal Mode.png b/dist/images/creatures/Helwyr#Normal Mode.png new file mode 100644 index 0000000..1cd8db5 Binary files /dev/null and b/dist/images/creatures/Helwyr#Normal Mode.png differ diff --git a/dist/images/creatures/Hermod, the Spirit of War#Normal.png b/dist/images/creatures/Hermod, the Spirit of War#Normal.png new file mode 100644 index 0000000..6201526 Binary files /dev/null and b/dist/images/creatures/Hermod, the Spirit of War#Normal.png differ diff --git a/dist/images/creatures/Hermod, the Spirit of War#Quest.png b/dist/images/creatures/Hermod, the Spirit of War#Quest.png new file mode 100644 index 0000000..6201526 Binary files /dev/null and b/dist/images/creatures/Hermod, the Spirit of War#Quest.png differ diff --git a/dist/images/creatures/Hill Giant#Default.png b/dist/images/creatures/Hill Giant#Default.png new file mode 100644 index 0000000..41b2a75 Binary files /dev/null and b/dist/images/creatures/Hill Giant#Default.png differ diff --git a/dist/images/creatures/Hobgoblin (elite)#Default.png b/dist/images/creatures/Hobgoblin (elite)#Default.png new file mode 100644 index 0000000..b53745a Binary files /dev/null and b/dist/images/creatures/Hobgoblin (elite)#Default.png differ diff --git a/dist/images/creatures/Hobgoblin#Level 15.png b/dist/images/creatures/Hobgoblin#Level 15.png new file mode 100644 index 0000000..ddd7edc Binary files /dev/null and b/dist/images/creatures/Hobgoblin#Level 15.png differ diff --git a/dist/images/creatures/Hobgoblin#Level 18.png b/dist/images/creatures/Hobgoblin#Level 18.png new file mode 100644 index 0000000..ed99c04 Binary files /dev/null and b/dist/images/creatures/Hobgoblin#Level 18.png differ diff --git a/dist/images/creatures/Hobgoblin#Level 91 (GWD).png b/dist/images/creatures/Hobgoblin#Level 91 (GWD).png new file mode 100644 index 0000000..ae43bae Binary files /dev/null and b/dist/images/creatures/Hobgoblin#Level 91 (GWD).png differ diff --git a/dist/images/creatures/Huge skeleton#Normal mode.png b/dist/images/creatures/Huge skeleton#Normal mode.png new file mode 100644 index 0000000..606c775 Binary files /dev/null and b/dist/images/creatures/Huge skeleton#Normal mode.png differ diff --git a/dist/images/creatures/Huge skeleton#Story mode.png b/dist/images/creatures/Huge skeleton#Story mode.png new file mode 100644 index 0000000..9434269 Binary files /dev/null and b/dist/images/creatures/Huge skeleton#Story mode.png differ diff --git a/dist/images/creatures/Hydrix dragon (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Hydrix dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..a0ace31 Binary files /dev/null and b/dist/images/creatures/Hydrix dragon (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Hydrix dragon#Default.png b/dist/images/creatures/Hydrix dragon#Default.png new file mode 100644 index 0000000..af7dd97 Binary files /dev/null and b/dist/images/creatures/Hydrix dragon#Default.png differ diff --git a/dist/images/creatures/Ice giant#Level 47 (1).png b/dist/images/creatures/Ice giant#Level 47 (1).png new file mode 100644 index 0000000..d719e9c Binary files /dev/null and b/dist/images/creatures/Ice giant#Level 47 (1).png differ diff --git a/dist/images/creatures/Ice giant#Level 47 (2).png b/dist/images/creatures/Ice giant#Level 47 (2).png new file mode 100644 index 0000000..8f7e437 Binary files /dev/null and b/dist/images/creatures/Ice giant#Level 47 (2).png differ diff --git a/dist/images/creatures/Ice nihil#boss.png b/dist/images/creatures/Ice nihil#boss.png new file mode 100644 index 0000000..ce13061 Binary files /dev/null and b/dist/images/creatures/Ice nihil#boss.png differ diff --git a/dist/images/creatures/Ice nihil#normal.png b/dist/images/creatures/Ice nihil#normal.png new file mode 100644 index 0000000..ce13061 Binary files /dev/null and b/dist/images/creatures/Ice nihil#normal.png differ diff --git a/dist/images/creatures/Ice spider#Default.png b/dist/images/creatures/Ice spider#Default.png new file mode 100644 index 0000000..33d0cae Binary files /dev/null and b/dist/images/creatures/Ice spider#Default.png differ diff --git a/dist/images/creatures/Ice strykewyrm#Default.png b/dist/images/creatures/Ice strykewyrm#Default.png new file mode 100644 index 0000000..8c920cf Binary files /dev/null and b/dist/images/creatures/Ice strykewyrm#Default.png differ diff --git a/dist/images/creatures/Ice troll female#Default.png b/dist/images/creatures/Ice troll female#Default.png new file mode 100644 index 0000000..e169765 Binary files /dev/null and b/dist/images/creatures/Ice troll female#Default.png differ diff --git a/dist/images/creatures/Ice troll grunt#Default.png b/dist/images/creatures/Ice troll grunt#Default.png new file mode 100644 index 0000000..369d4a3 Binary files /dev/null and b/dist/images/creatures/Ice troll grunt#Default.png differ diff --git a/dist/images/creatures/Ice troll male#Default.png b/dist/images/creatures/Ice troll male#Default.png new file mode 100644 index 0000000..2e76436 Binary files /dev/null and b/dist/images/creatures/Ice troll male#Default.png differ diff --git a/dist/images/creatures/Ice troll runt#Default.png b/dist/images/creatures/Ice troll runt#Default.png new file mode 100644 index 0000000..9050799 Binary files /dev/null and b/dist/images/creatures/Ice troll runt#Default.png differ diff --git a/dist/images/creatures/Ice troll#Desert Treasure.png b/dist/images/creatures/Ice troll#Desert Treasure.png new file mode 100644 index 0000000..26abd33 Binary files /dev/null and b/dist/images/creatures/Ice troll#Desert Treasure.png differ diff --git a/dist/images/creatures/Ice troll#Troll Romance.png b/dist/images/creatures/Ice troll#Troll Romance.png new file mode 100644 index 0000000..26abd33 Binary files /dev/null and b/dist/images/creatures/Ice troll#Troll Romance.png differ diff --git a/dist/images/creatures/Ice warrior#Ice Queen's Lair.png b/dist/images/creatures/Ice warrior#Ice Queen's Lair.png new file mode 100644 index 0000000..25439ea Binary files /dev/null and b/dist/images/creatures/Ice warrior#Ice Queen's Lair.png differ diff --git a/dist/images/creatures/Ice warrior#Normal.png b/dist/images/creatures/Ice warrior#Normal.png new file mode 100644 index 0000000..b550030 Binary files /dev/null and b/dist/images/creatures/Ice warrior#Normal.png differ diff --git a/dist/images/creatures/Ice wolf#58.png b/dist/images/creatures/Ice wolf#58.png new file mode 100644 index 0000000..522c837 Binary files /dev/null and b/dist/images/creatures/Ice wolf#58.png differ diff --git a/dist/images/creatures/Ice wolf#72.png b/dist/images/creatures/Ice wolf#72.png new file mode 100644 index 0000000..522c837 Binary files /dev/null and b/dist/images/creatures/Ice wolf#72.png differ diff --git a/dist/images/creatures/Icefiend (Ghorrock)#Default.png b/dist/images/creatures/Icefiend (Ghorrock)#Default.png new file mode 100644 index 0000000..5846323 Binary files /dev/null and b/dist/images/creatures/Icefiend (Ghorrock)#Default.png differ diff --git a/dist/images/creatures/Icefiend#God Wars Dungeon.png b/dist/images/creatures/Icefiend#God Wars Dungeon.png new file mode 100644 index 0000000..c391624 Binary files /dev/null and b/dist/images/creatures/Icefiend#God Wars Dungeon.png differ diff --git a/dist/images/creatures/Icefiend#Ice Mountain (melting).png b/dist/images/creatures/Icefiend#Ice Mountain (melting).png new file mode 100644 index 0000000..c391624 Binary files /dev/null and b/dist/images/creatures/Icefiend#Ice Mountain (melting).png differ diff --git a/dist/images/creatures/Icefiend#Ice Mountain.png b/dist/images/creatures/Icefiend#Ice Mountain.png new file mode 100644 index 0000000..c391624 Binary files /dev/null and b/dist/images/creatures/Icefiend#Ice Mountain.png differ diff --git a/dist/images/creatures/Icelord#melee.png b/dist/images/creatures/Icelord#melee.png new file mode 100644 index 0000000..c6d6479 Binary files /dev/null and b/dist/images/creatures/Icelord#melee.png differ diff --git a/dist/images/creatures/Icelord#ranged.png b/dist/images/creatures/Icelord#ranged.png new file mode 100644 index 0000000..c6d6479 Binary files /dev/null and b/dist/images/creatures/Icelord#ranged.png differ diff --git a/dist/images/creatures/Imp scavenger#Default.png b/dist/images/creatures/Imp scavenger#Default.png new file mode 100644 index 0000000..54d8879 Binary files /dev/null and b/dist/images/creatures/Imp scavenger#Default.png differ diff --git a/dist/images/creatures/Imp#God Wars Dungeon.png b/dist/images/creatures/Imp#God Wars Dungeon.png new file mode 100644 index 0000000..a967130 Binary files /dev/null and b/dist/images/creatures/Imp#God Wars Dungeon.png differ diff --git a/dist/images/creatures/Imp#Normal.png b/dist/images/creatures/Imp#Normal.png new file mode 100644 index 0000000..a967130 Binary files /dev/null and b/dist/images/creatures/Imp#Normal.png differ diff --git a/dist/images/creatures/Imperial mage akh#Default.png b/dist/images/creatures/Imperial mage akh#Default.png new file mode 100644 index 0000000..f9e3119 Binary files /dev/null and b/dist/images/creatures/Imperial mage akh#Default.png differ diff --git a/dist/images/creatures/Imperial ranger akh#Default.png b/dist/images/creatures/Imperial ranger akh#Default.png new file mode 100644 index 0000000..010d202 Binary files /dev/null and b/dist/images/creatures/Imperial ranger akh#Default.png differ diff --git a/dist/images/creatures/Imperial warrior akh#Default.png b/dist/images/creatures/Imperial warrior akh#Default.png new file mode 100644 index 0000000..faa81f6 Binary files /dev/null and b/dist/images/creatures/Imperial warrior akh#Default.png differ diff --git a/dist/images/creatures/Infernal Mage (elite)#Default.png b/dist/images/creatures/Infernal Mage (elite)#Default.png new file mode 100644 index 0000000..c9fe205 Binary files /dev/null and b/dist/images/creatures/Infernal Mage (elite)#Default.png differ diff --git a/dist/images/creatures/Infernal Mage#Default.png b/dist/images/creatures/Infernal Mage#Default.png new file mode 100644 index 0000000..c9fe205 Binary files /dev/null and b/dist/images/creatures/Infernal Mage#Default.png differ diff --git a/dist/images/creatures/Iorwerth guard#Default.png b/dist/images/creatures/Iorwerth guard#Default.png new file mode 100644 index 0000000..75f6659 Binary files /dev/null and b/dist/images/creatures/Iorwerth guard#Default.png differ diff --git a/dist/images/creatures/Iorwerth scout#Default.png b/dist/images/creatures/Iorwerth scout#Default.png new file mode 100644 index 0000000..27113b1 Binary files /dev/null and b/dist/images/creatures/Iorwerth scout#Default.png differ diff --git a/dist/images/creatures/Iron dragon#Default.png b/dist/images/creatures/Iron dragon#Default.png new file mode 100644 index 0000000..c206d0c Binary files /dev/null and b/dist/images/creatures/Iron dragon#Default.png differ diff --git a/dist/images/creatures/Jackal#Default.png b/dist/images/creatures/Jackal#Default.png new file mode 100644 index 0000000..dc72d7a Binary files /dev/null and b/dist/images/creatures/Jackal#Default.png differ diff --git a/dist/images/creatures/Jelly#Default.png b/dist/images/creatures/Jelly#Default.png new file mode 100644 index 0000000..9be0e6d Binary files /dev/null and b/dist/images/creatures/Jelly#Default.png differ diff --git a/dist/images/creatures/Jubbly bird#Default.png b/dist/images/creatures/Jubbly bird#Default.png new file mode 100644 index 0000000..ee6817d Binary files /dev/null and b/dist/images/creatures/Jubbly bird#Default.png differ diff --git a/dist/images/creatures/Jungle Wolf#Default.png b/dist/images/creatures/Jungle Wolf#Default.png new file mode 100644 index 0000000..7385e90 Binary files /dev/null and b/dist/images/creatures/Jungle Wolf#Default.png differ diff --git a/dist/images/creatures/Jungle horror#Default.png b/dist/images/creatures/Jungle horror#Default.png new file mode 100644 index 0000000..8186649 Binary files /dev/null and b/dist/images/creatures/Jungle horror#Default.png differ diff --git a/dist/images/creatures/Jungle spider#Ape Atoll.png b/dist/images/creatures/Jungle spider#Ape Atoll.png new file mode 100644 index 0000000..6399bfe Binary files /dev/null and b/dist/images/creatures/Jungle spider#Ape Atoll.png differ diff --git a/dist/images/creatures/Jungle spider#Common.png b/dist/images/creatures/Jungle spider#Common.png new file mode 100644 index 0000000..c06eaca Binary files /dev/null and b/dist/images/creatures/Jungle spider#Common.png differ diff --git a/dist/images/creatures/Jungle spider#Jade Vine (level 42).png b/dist/images/creatures/Jungle spider#Jade Vine (level 42).png new file mode 100644 index 0000000..e857446 Binary files /dev/null and b/dist/images/creatures/Jungle spider#Jade Vine (level 42).png differ diff --git a/dist/images/creatures/Jungle spider#Jade Vine (level 49).png b/dist/images/creatures/Jungle spider#Jade Vine (level 49).png new file mode 100644 index 0000000..e857446 Binary files /dev/null and b/dist/images/creatures/Jungle spider#Jade Vine (level 49).png differ diff --git a/dist/images/creatures/Jungle spider#Musa Point.png b/dist/images/creatures/Jungle spider#Musa Point.png new file mode 100644 index 0000000..c06eaca Binary files /dev/null and b/dist/images/creatures/Jungle spider#Musa Point.png differ diff --git a/dist/images/creatures/Jungle spider#Tai Bwo Wannai Cleanup.png b/dist/images/creatures/Jungle spider#Tai Bwo Wannai Cleanup.png new file mode 100644 index 0000000..c06eaca Binary files /dev/null and b/dist/images/creatures/Jungle spider#Tai Bwo Wannai Cleanup.png differ diff --git a/dist/images/creatures/Jungle strykewyrm#Default.png b/dist/images/creatures/Jungle strykewyrm#Default.png new file mode 100644 index 0000000..b8b299b Binary files /dev/null and b/dist/images/creatures/Jungle strykewyrm#Default.png differ diff --git a/dist/images/creatures/K'ril Tsutsaroth#Hard mode.png b/dist/images/creatures/K'ril Tsutsaroth#Hard mode.png new file mode 100644 index 0000000..e0c330d Binary files /dev/null and b/dist/images/creatures/K'ril Tsutsaroth#Hard mode.png differ diff --git a/dist/images/creatures/K'ril Tsutsaroth#Normal.png b/dist/images/creatures/K'ril Tsutsaroth#Normal.png new file mode 100644 index 0000000..e0c330d Binary files /dev/null and b/dist/images/creatures/K'ril Tsutsaroth#Normal.png differ diff --git a/dist/images/creatures/K'ril Tsutsaroth#The World Wakes.png b/dist/images/creatures/K'ril Tsutsaroth#The World Wakes.png new file mode 100644 index 0000000..ec13f22 Binary files /dev/null and b/dist/images/creatures/K'ril Tsutsaroth#The World Wakes.png differ diff --git a/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Bloodchiller.png b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Bloodchiller.png new file mode 100644 index 0000000..969f06b Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Bloodchiller.png differ diff --git a/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Pummeller.png b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Pummeller.png new file mode 100644 index 0000000..4d805f9 Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Pummeller.png differ diff --git a/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Riftsplitter.png b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Riftsplitter.png new file mode 100644 index 0000000..51817b4 Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Riftsplitter.png differ diff --git a/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Warmonger.png b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Warmonger.png new file mode 100644 index 0000000..8b0456a Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon (The Shadow Reef)#Warmonger.png differ diff --git a/dist/images/creatures/Kal'gerion demon#Bloodchiller.png b/dist/images/creatures/Kal'gerion demon#Bloodchiller.png new file mode 100644 index 0000000..969f06b Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon#Bloodchiller.png differ diff --git a/dist/images/creatures/Kal'gerion demon#Pummeller.png b/dist/images/creatures/Kal'gerion demon#Pummeller.png new file mode 100644 index 0000000..4d805f9 Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon#Pummeller.png differ diff --git a/dist/images/creatures/Kal'gerion demon#Riftsplitter.png b/dist/images/creatures/Kal'gerion demon#Riftsplitter.png new file mode 100644 index 0000000..51817b4 Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon#Riftsplitter.png differ diff --git a/dist/images/creatures/Kal'gerion demon#Rush of Blood.png b/dist/images/creatures/Kal'gerion demon#Rush of Blood.png new file mode 100644 index 0000000..969f06b Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon#Rush of Blood.png differ diff --git a/dist/images/creatures/Kal'gerion demon#Thunderous.png b/dist/images/creatures/Kal'gerion demon#Thunderous.png new file mode 100644 index 0000000..bb63a7a Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon#Thunderous.png differ diff --git a/dist/images/creatures/Kal'gerion demon#Warmonger.png b/dist/images/creatures/Kal'gerion demon#Warmonger.png new file mode 100644 index 0000000..8b0456a Binary files /dev/null and b/dist/images/creatures/Kal'gerion demon#Warmonger.png differ diff --git a/dist/images/creatures/Kalphite Guardian#Default.png b/dist/images/creatures/Kalphite Guardian#Default.png new file mode 100644 index 0000000..5a2aaaf Binary files /dev/null and b/dist/images/creatures/Kalphite Guardian#Default.png differ diff --git a/dist/images/creatures/Kalphite King#Magic.png b/dist/images/creatures/Kalphite King#Magic.png new file mode 100644 index 0000000..958b226 Binary files /dev/null and b/dist/images/creatures/Kalphite King#Magic.png differ diff --git a/dist/images/creatures/Kalphite King#Melee.png b/dist/images/creatures/Kalphite King#Melee.png new file mode 100644 index 0000000..af6b812 Binary files /dev/null and b/dist/images/creatures/Kalphite King#Melee.png differ diff --git a/dist/images/creatures/Kalphite King#Ranged.png b/dist/images/creatures/Kalphite King#Ranged.png new file mode 100644 index 0000000..59bbfd2 Binary files /dev/null and b/dist/images/creatures/Kalphite King#Ranged.png differ diff --git a/dist/images/creatures/Kalphite Queen#First form.png b/dist/images/creatures/Kalphite Queen#First form.png new file mode 100644 index 0000000..fb6ea32 Binary files /dev/null and b/dist/images/creatures/Kalphite Queen#First form.png differ diff --git a/dist/images/creatures/Kalphite Queen#Second form.png b/dist/images/creatures/Kalphite Queen#Second form.png new file mode 100644 index 0000000..98c9a68 Binary files /dev/null and b/dist/images/creatures/Kalphite Queen#Second form.png differ diff --git a/dist/images/creatures/Kalphite Soldier#Default.png b/dist/images/creatures/Kalphite Soldier#Default.png new file mode 100644 index 0000000..b7e3642 Binary files /dev/null and b/dist/images/creatures/Kalphite Soldier#Default.png differ diff --git a/dist/images/creatures/Kalphite Worker#Default.png b/dist/images/creatures/Kalphite Worker#Default.png new file mode 100644 index 0000000..57a24ee Binary files /dev/null and b/dist/images/creatures/Kalphite Worker#Default.png differ diff --git a/dist/images/creatures/Karil the Tainted#Normal.png b/dist/images/creatures/Karil the Tainted#Normal.png new file mode 100644 index 0000000..93af2f8 Binary files /dev/null and b/dist/images/creatures/Karil the Tainted#Normal.png differ diff --git a/dist/images/creatures/Karil the Tainted#Rise of the Six.png b/dist/images/creatures/Karil the Tainted#Rise of the Six.png new file mode 100644 index 0000000..747fd49 Binary files /dev/null and b/dist/images/creatures/Karil the Tainted#Rise of the Six.png differ diff --git a/dist/images/creatures/Kerapac, the bound#Hard mode.png b/dist/images/creatures/Kerapac, the bound#Hard mode.png new file mode 100644 index 0000000..036dfc0 Binary files /dev/null and b/dist/images/creatures/Kerapac, the bound#Hard mode.png differ diff --git a/dist/images/creatures/Kerapac, the bound#Normal mode.png b/dist/images/creatures/Kerapac, the bound#Normal mode.png new file mode 100644 index 0000000..036dfc0 Binary files /dev/null and b/dist/images/creatures/Kerapac, the bound#Normal mode.png differ diff --git a/dist/images/creatures/Killerwatt#Default.png b/dist/images/creatures/Killerwatt#Default.png new file mode 100644 index 0000000..7180917 Binary files /dev/null and b/dist/images/creatures/Killerwatt#Default.png differ diff --git a/dist/images/creatures/King Black Dragon#Default.png b/dist/images/creatures/King Black Dragon#Default.png new file mode 100644 index 0000000..0a34263 Binary files /dev/null and b/dist/images/creatures/King Black Dragon#Default.png differ diff --git a/dist/images/creatures/King Scorpion#Default.png b/dist/images/creatures/King Scorpion#Default.png new file mode 100644 index 0000000..a54be5a Binary files /dev/null and b/dist/images/creatures/King Scorpion#Default.png differ diff --git a/dist/images/creatures/Knight of Ardougne (West Ardougne)#Mourner Tunnels.png b/dist/images/creatures/Knight of Ardougne (West Ardougne)#Mourner Tunnels.png new file mode 100644 index 0000000..c7bcdf1 Binary files /dev/null and b/dist/images/creatures/Knight of Ardougne (West Ardougne)#Mourner Tunnels.png differ diff --git a/dist/images/creatures/Knight of Ardougne (West Ardougne)#Surface.png b/dist/images/creatures/Knight of Ardougne (West Ardougne)#Surface.png new file mode 100644 index 0000000..c7bcdf1 Binary files /dev/null and b/dist/images/creatures/Knight of Ardougne (West Ardougne)#Surface.png differ diff --git a/dist/images/creatures/Kor'Vath the Blightbringer#140,000 life points.png b/dist/images/creatures/Kor'Vath the Blightbringer#140,000 life points.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/dist/images/creatures/Kor'Vath the Blightbringer#140,000 life points.png differ diff --git a/dist/images/creatures/Kor'Vath the Blightbringer#170,000 life points.png b/dist/images/creatures/Kor'Vath the Blightbringer#170,000 life points.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/dist/images/creatures/Kor'Vath the Blightbringer#170,000 life points.png differ diff --git a/dist/images/creatures/Kor'Vath the Blightbringer#400,000 life points.png b/dist/images/creatures/Kor'Vath the Blightbringer#400,000 life points.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/dist/images/creatures/Kor'Vath the Blightbringer#400,000 life points.png differ diff --git a/dist/images/creatures/Kraka#Default.png b/dist/images/creatures/Kraka#Default.png new file mode 100644 index 0000000..1918672 Binary files /dev/null and b/dist/images/creatures/Kraka#Default.png differ diff --git a/dist/images/creatures/Kree'arra#Hard Mode.png b/dist/images/creatures/Kree'arra#Hard Mode.png new file mode 100644 index 0000000..1f73292 Binary files /dev/null and b/dist/images/creatures/Kree'arra#Hard Mode.png differ diff --git a/dist/images/creatures/Kree'arra#Normal.png b/dist/images/creatures/Kree'arra#Normal.png new file mode 100644 index 0000000..1f73292 Binary files /dev/null and b/dist/images/creatures/Kree'arra#Normal.png differ diff --git a/dist/images/creatures/Kree'arra#The World Wakes.png b/dist/images/creatures/Kree'arra#The World Wakes.png new file mode 100644 index 0000000..1f73292 Binary files /dev/null and b/dist/images/creatures/Kree'arra#The World Wakes.png differ diff --git a/dist/images/creatures/Kurask#Examine #1.png b/dist/images/creatures/Kurask#Examine #1.png new file mode 100644 index 0000000..47a0770 Binary files /dev/null and b/dist/images/creatures/Kurask#Examine #1.png differ diff --git a/dist/images/creatures/Kurask#Examine #2.png b/dist/images/creatures/Kurask#Examine #2.png new file mode 100644 index 0000000..47a0770 Binary files /dev/null and b/dist/images/creatures/Kurask#Examine #2.png differ diff --git a/dist/images/creatures/La'Kalor the Unbroken#Default.png b/dist/images/creatures/La'Kalor the Unbroken#Default.png new file mode 100644 index 0000000..6532237 Binary files /dev/null and b/dist/images/creatures/La'Kalor the Unbroken#Default.png differ diff --git a/dist/images/creatures/Laboratory slime#Adult (normal mode).png b/dist/images/creatures/Laboratory slime#Adult (normal mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/dist/images/creatures/Laboratory slime#Adult (normal mode).png differ diff --git a/dist/images/creatures/Laboratory slime#Adult (story mode).png b/dist/images/creatures/Laboratory slime#Adult (story mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/dist/images/creatures/Laboratory slime#Adult (story mode).png differ diff --git a/dist/images/creatures/Laboratory slime#Spawnling (normal mode).png b/dist/images/creatures/Laboratory slime#Spawnling (normal mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/dist/images/creatures/Laboratory slime#Spawnling (normal mode).png differ diff --git a/dist/images/creatures/Laboratory slime#Spawnling (story mode).png b/dist/images/creatures/Laboratory slime#Spawnling (story mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/dist/images/creatures/Laboratory slime#Spawnling (story mode).png differ diff --git a/dist/images/creatures/Lampenflora#Default.png b/dist/images/creatures/Lampenflora#Default.png new file mode 100644 index 0000000..03e5df5 Binary files /dev/null and b/dist/images/creatures/Lampenflora#Default.png differ diff --git a/dist/images/creatures/Lava spider#Normal mode.png b/dist/images/creatures/Lava spider#Normal mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/dist/images/creatures/Lava spider#Normal mode.png differ diff --git a/dist/images/creatures/Lava spider#Story mode.png b/dist/images/creatures/Lava spider#Story mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/dist/images/creatures/Lava spider#Story mode.png differ diff --git a/dist/images/creatures/Lava strykewyrm (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Lava strykewyrm (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..fabdb27 Binary files /dev/null and b/dist/images/creatures/Lava strykewyrm (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Lava strykewyrm#Default.png b/dist/images/creatures/Lava strykewyrm#Default.png new file mode 100644 index 0000000..fabdb27 Binary files /dev/null and b/dist/images/creatures/Lava strykewyrm#Default.png differ diff --git a/dist/images/creatures/Legio Primus#Default.png b/dist/images/creatures/Legio Primus#Default.png new file mode 100644 index 0000000..8207ebc Binary files /dev/null and b/dist/images/creatures/Legio Primus#Default.png differ diff --git a/dist/images/creatures/Legio Quartus#Default.png b/dist/images/creatures/Legio Quartus#Default.png new file mode 100644 index 0000000..2a07560 Binary files /dev/null and b/dist/images/creatures/Legio Quartus#Default.png differ diff --git a/dist/images/creatures/Legio Quintus#Default.png b/dist/images/creatures/Legio Quintus#Default.png new file mode 100644 index 0000000..8182e59 Binary files /dev/null and b/dist/images/creatures/Legio Quintus#Default.png differ diff --git a/dist/images/creatures/Legio Secundus#Default.png b/dist/images/creatures/Legio Secundus#Default.png new file mode 100644 index 0000000..afb0612 Binary files /dev/null and b/dist/images/creatures/Legio Secundus#Default.png differ diff --git a/dist/images/creatures/Legio Sextus#Default.png b/dist/images/creatures/Legio Sextus#Default.png new file mode 100644 index 0000000..320a009 Binary files /dev/null and b/dist/images/creatures/Legio Sextus#Default.png differ diff --git a/dist/images/creatures/Legio Tertius#Default.png b/dist/images/creatures/Legio Tertius#Default.png new file mode 100644 index 0000000..f3d970a Binary files /dev/null and b/dist/images/creatures/Legio Tertius#Default.png differ diff --git a/dist/images/creatures/Lesser demon (Wizards' Tower)#Default.png b/dist/images/creatures/Lesser demon (Wizards' Tower)#Default.png new file mode 100644 index 0000000..66c80fd Binary files /dev/null and b/dist/images/creatures/Lesser demon (Wizards' Tower)#Default.png differ diff --git a/dist/images/creatures/Lesser demon#1.png b/dist/images/creatures/Lesser demon#1.png new file mode 100644 index 0000000..ef4f9ec Binary files /dev/null and b/dist/images/creatures/Lesser demon#1.png differ diff --git a/dist/images/creatures/Lesser demon#2.png b/dist/images/creatures/Lesser demon#2.png new file mode 100644 index 0000000..bfbbc45 Binary files /dev/null and b/dist/images/creatures/Lesser demon#2.png differ diff --git a/dist/images/creatures/Lesser demon#3.png b/dist/images/creatures/Lesser demon#3.png new file mode 100644 index 0000000..a3bc5bf Binary files /dev/null and b/dist/images/creatures/Lesser demon#3.png differ diff --git a/dist/images/creatures/Lesser demon#4.png b/dist/images/creatures/Lesser demon#4.png new file mode 100644 index 0000000..e8cdb85 Binary files /dev/null and b/dist/images/creatures/Lesser demon#4.png differ diff --git a/dist/images/creatures/Lesser demon#5.png b/dist/images/creatures/Lesser demon#5.png new file mode 100644 index 0000000..b164149 Binary files /dev/null and b/dist/images/creatures/Lesser demon#5.png differ diff --git a/dist/images/creatures/Linza the Disgraced#Barrows.png b/dist/images/creatures/Linza the Disgraced#Barrows.png new file mode 100644 index 0000000..b46a5a8 Binary files /dev/null and b/dist/images/creatures/Linza the Disgraced#Barrows.png differ diff --git a/dist/images/creatures/Linza the Disgraced#Sliske's Endgame.png b/dist/images/creatures/Linza the Disgraced#Sliske's Endgame.png new file mode 100644 index 0000000..b46a5a8 Binary files /dev/null and b/dist/images/creatures/Linza the Disgraced#Sliske's Endgame.png differ diff --git a/dist/images/creatures/Liverworts#Default.png b/dist/images/creatures/Liverworts#Default.png new file mode 100644 index 0000000..1f1ed8b Binary files /dev/null and b/dist/images/creatures/Liverworts#Default.png differ diff --git a/dist/images/creatures/Living rock patriarch#Default.png b/dist/images/creatures/Living rock patriarch#Default.png new file mode 100644 index 0000000..53a3773 Binary files /dev/null and b/dist/images/creatures/Living rock patriarch#Default.png differ diff --git a/dist/images/creatures/Living rock protector#Default.png b/dist/images/creatures/Living rock protector#Default.png new file mode 100644 index 0000000..670832a Binary files /dev/null and b/dist/images/creatures/Living rock protector#Default.png differ diff --git a/dist/images/creatures/Living rock striker#Default.png b/dist/images/creatures/Living rock striker#Default.png new file mode 100644 index 0000000..5a64dd9 Binary files /dev/null and b/dist/images/creatures/Living rock striker#Default.png differ diff --git a/dist/images/creatures/Lizard#Default.png b/dist/images/creatures/Lizard#Default.png new file mode 100644 index 0000000..1f60855 Binary files /dev/null and b/dist/images/creatures/Lizard#Default.png differ diff --git a/dist/images/creatures/Locust lancer#Default.png b/dist/images/creatures/Locust lancer#Default.png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/dist/images/creatures/Locust lancer#Default.png differ diff --git a/dist/images/creatures/Locust ranger#Default.png b/dist/images/creatures/Locust ranger#Default.png new file mode 100644 index 0000000..865dc23 Binary files /dev/null and b/dist/images/creatures/Locust ranger#Default.png differ diff --git a/dist/images/creatures/Locust rider#Melee (1).png b/dist/images/creatures/Locust rider#Melee (1).png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/dist/images/creatures/Locust rider#Melee (1).png differ diff --git a/dist/images/creatures/Locust rider#Melee (2).png b/dist/images/creatures/Locust rider#Melee (2).png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/dist/images/creatures/Locust rider#Melee (2).png differ diff --git a/dist/images/creatures/Locust rider#Melee (3).png b/dist/images/creatures/Locust rider#Melee (3).png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/dist/images/creatures/Locust rider#Melee (3).png differ diff --git a/dist/images/creatures/Locust rider#Range (1).png b/dist/images/creatures/Locust rider#Range (1).png new file mode 100644 index 0000000..f69ab10 Binary files /dev/null and b/dist/images/creatures/Locust rider#Range (1).png differ diff --git a/dist/images/creatures/Locust rider#Range (2).png b/dist/images/creatures/Locust rider#Range (2).png new file mode 100644 index 0000000..f69ab10 Binary files /dev/null and b/dist/images/creatures/Locust rider#Range (2).png differ diff --git a/dist/images/creatures/Locust rider#Range (3).png b/dist/images/creatures/Locust rider#Range (3).png new file mode 100644 index 0000000..f69ab10 Binary files /dev/null and b/dist/images/creatures/Locust rider#Range (3).png differ diff --git a/dist/images/creatures/Luminous snaggler#Default.png b/dist/images/creatures/Luminous snaggler#Default.png new file mode 100644 index 0000000..4ed5a43 Binary files /dev/null and b/dist/images/creatures/Luminous snaggler#Default.png differ diff --git a/dist/images/creatures/Lumpnose#Default.png b/dist/images/creatures/Lumpnose#Default.png new file mode 100644 index 0000000..08c188c Binary files /dev/null and b/dist/images/creatures/Lumpnose#Default.png differ diff --git a/dist/images/creatures/Maelstrom, Raging Waterfiend#Default.png b/dist/images/creatures/Maelstrom, Raging Waterfiend#Default.png new file mode 100644 index 0000000..761076c Binary files /dev/null and b/dist/images/creatures/Maelstrom, Raging Waterfiend#Default.png differ diff --git a/dist/images/creatures/Magic axe#Default.png b/dist/images/creatures/Magic axe#Default.png new file mode 100644 index 0000000..9fe8f4d Binary files /dev/null and b/dist/images/creatures/Magic axe#Default.png differ diff --git a/dist/images/creatures/Manifest shadow#Default.png b/dist/images/creatures/Manifest shadow#Default.png new file mode 100644 index 0000000..6676ecb Binary files /dev/null and b/dist/images/creatures/Manifest shadow#Default.png differ diff --git a/dist/images/creatures/Masuta the Descended#Default.png b/dist/images/creatures/Masuta the Descended#Default.png new file mode 100644 index 0000000..cf1b059 Binary files /dev/null and b/dist/images/creatures/Masuta the Descended#Default.png differ diff --git a/dist/images/creatures/Mature grotworm#Default.png b/dist/images/creatures/Mature grotworm#Default.png new file mode 100644 index 0000000..9a4adb9 Binary files /dev/null and b/dist/images/creatures/Mature grotworm#Default.png differ diff --git a/dist/images/creatures/Mighty banshee#Default.png b/dist/images/creatures/Mighty banshee#Default.png new file mode 100644 index 0000000..fc66b91 Binary files /dev/null and b/dist/images/creatures/Mighty banshee#Default.png differ diff --git a/dist/images/creatures/Minotaur#Level 12.png b/dist/images/creatures/Minotaur#Level 12.png new file mode 100644 index 0000000..398d742 Binary files /dev/null and b/dist/images/creatures/Minotaur#Level 12.png differ diff --git a/dist/images/creatures/Minotaur#Level 15.png b/dist/images/creatures/Minotaur#Level 15.png new file mode 100644 index 0000000..398d742 Binary files /dev/null and b/dist/images/creatures/Minotaur#Level 15.png differ diff --git a/dist/images/creatures/Minotaur#Level 44 (Slayer challenge).png b/dist/images/creatures/Minotaur#Level 44 (Slayer challenge).png new file mode 100644 index 0000000..398d742 Binary files /dev/null and b/dist/images/creatures/Minotaur#Level 44 (Slayer challenge).png differ diff --git a/dist/images/creatures/Mithril dragon#Default.png b/dist/images/creatures/Mithril dragon#Default.png new file mode 100644 index 0000000..0c9ea82 Binary files /dev/null and b/dist/images/creatures/Mithril dragon#Default.png differ diff --git a/dist/images/creatures/Mogre#Default.png b/dist/images/creatures/Mogre#Default.png new file mode 100644 index 0000000..eb0c0e7 Binary files /dev/null and b/dist/images/creatures/Mogre#Default.png differ diff --git a/dist/images/creatures/Molanisk#Default.png b/dist/images/creatures/Molanisk#Default.png new file mode 100644 index 0000000..aea76fb Binary files /dev/null and b/dist/images/creatures/Molanisk#Default.png differ diff --git a/dist/images/creatures/Monkey Zombie#72.png b/dist/images/creatures/Monkey Zombie#72.png new file mode 100644 index 0000000..dd6c556 Binary files /dev/null and b/dist/images/creatures/Monkey Zombie#72.png differ diff --git a/dist/images/creatures/Monkey Zombie#75.png b/dist/images/creatures/Monkey Zombie#75.png new file mode 100644 index 0000000..dd6c556 Binary files /dev/null and b/dist/images/creatures/Monkey Zombie#75.png differ diff --git a/dist/images/creatures/Monkey Zombie#77.png b/dist/images/creatures/Monkey Zombie#77.png new file mode 100644 index 0000000..dd6c556 Binary files /dev/null and b/dist/images/creatures/Monkey Zombie#77.png differ diff --git a/dist/images/creatures/Moss giant#Common (1).png b/dist/images/creatures/Moss giant#Common (1).png new file mode 100644 index 0000000..0bd5b32 Binary files /dev/null and b/dist/images/creatures/Moss giant#Common (1).png differ diff --git a/dist/images/creatures/Moss giant#Common (2).png b/dist/images/creatures/Moss giant#Common (2).png new file mode 100644 index 0000000..9d7d3e6 Binary files /dev/null and b/dist/images/creatures/Moss giant#Common (2).png differ diff --git a/dist/images/creatures/Moss giant#Common (3).png b/dist/images/creatures/Moss giant#Common (3).png new file mode 100644 index 0000000..140e2e3 Binary files /dev/null and b/dist/images/creatures/Moss giant#Common (3).png differ diff --git a/dist/images/creatures/Moss giant#Common (4).png b/dist/images/creatures/Moss giant#Common (4).png new file mode 100644 index 0000000..b88fe5e Binary files /dev/null and b/dist/images/creatures/Moss giant#Common (4).png differ diff --git a/dist/images/creatures/Moss giant#Common (5).png b/dist/images/creatures/Moss giant#Common (5).png new file mode 100644 index 0000000..03287b7 Binary files /dev/null and b/dist/images/creatures/Moss giant#Common (5).png differ diff --git a/dist/images/creatures/Moss giant#Glarial's Tomb.png b/dist/images/creatures/Moss giant#Glarial's Tomb.png new file mode 100644 index 0000000..a2ad574 Binary files /dev/null and b/dist/images/creatures/Moss giant#Glarial's Tomb.png differ diff --git a/dist/images/creatures/Moss golem#Default.png b/dist/images/creatures/Moss golem#Default.png new file mode 100644 index 0000000..5ff905a Binary files /dev/null and b/dist/images/creatures/Moss golem#Default.png differ diff --git a/dist/images/creatures/Mountain troll (well)#Default.png b/dist/images/creatures/Mountain troll (well)#Default.png new file mode 100644 index 0000000..6599dec Binary files /dev/null and b/dist/images/creatures/Mountain troll (well)#Default.png differ diff --git a/dist/images/creatures/Mountain troll#Default.png b/dist/images/creatures/Mountain troll#Default.png new file mode 100644 index 0000000..6599dec Binary files /dev/null and b/dist/images/creatures/Mountain troll#Default.png differ diff --git a/dist/images/creatures/Mounted terrorbird gnome#Level 46.png b/dist/images/creatures/Mounted terrorbird gnome#Level 46.png new file mode 100644 index 0000000..2889015 Binary files /dev/null and b/dist/images/creatures/Mounted terrorbird gnome#Level 46.png differ diff --git a/dist/images/creatures/Mounted terrorbird gnome#Level 53.png b/dist/images/creatures/Mounted terrorbird gnome#Level 53.png new file mode 100644 index 0000000..2889015 Binary files /dev/null and b/dist/images/creatures/Mounted terrorbird gnome#Level 53.png differ diff --git a/dist/images/creatures/Mourner (Mourner Tunnels)#Default.png b/dist/images/creatures/Mourner (Mourner Tunnels)#Default.png new file mode 100644 index 0000000..62e4a8e Binary files /dev/null and b/dist/images/creatures/Mourner (Mourner Tunnels)#Default.png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#1 (on fire).png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#1 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#1 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#1.png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#1.png new file mode 100644 index 0000000..e33c4f2 Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#1.png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#2 (on fire).png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#2 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#2 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#2.png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#2.png new file mode 100644 index 0000000..6c385e7 Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#2.png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#3 (on fire).png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#3 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#3 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#3.png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#3.png new file mode 100644 index 0000000..8cdab8b Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#3.png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#4 (on fire).png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#4 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#4 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#4.png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#4.png new file mode 100644 index 0000000..4aa2b3f Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#4.png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#Ashes.png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#Ashes.png new file mode 100644 index 0000000..827357d Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#Ashes.png differ diff --git a/dist/images/creatures/Mummy (Jaldraocht Pyramid)#Jaldraocht sarcophagus.png b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#Jaldraocht sarcophagus.png new file mode 100644 index 0000000..31d1e91 Binary files /dev/null and b/dist/images/creatures/Mummy (Jaldraocht Pyramid)#Jaldraocht sarcophagus.png differ diff --git a/dist/images/creatures/Mummy (Ullek)#1 (on fire).png b/dist/images/creatures/Mummy (Ullek)#1 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#1 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Ullek)#1.png b/dist/images/creatures/Mummy (Ullek)#1.png new file mode 100644 index 0000000..e33c4f2 Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#1.png differ diff --git a/dist/images/creatures/Mummy (Ullek)#2 (on fire).png b/dist/images/creatures/Mummy (Ullek)#2 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#2 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Ullek)#2.png b/dist/images/creatures/Mummy (Ullek)#2.png new file mode 100644 index 0000000..6c385e7 Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#2.png differ diff --git a/dist/images/creatures/Mummy (Ullek)#3 (on fire).png b/dist/images/creatures/Mummy (Ullek)#3 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#3 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Ullek)#3.png b/dist/images/creatures/Mummy (Ullek)#3.png new file mode 100644 index 0000000..8cdab8b Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#3.png differ diff --git a/dist/images/creatures/Mummy (Ullek)#4 (on fire).png b/dist/images/creatures/Mummy (Ullek)#4 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#4 (on fire).png differ diff --git a/dist/images/creatures/Mummy (Ullek)#4.png b/dist/images/creatures/Mummy (Ullek)#4.png new file mode 100644 index 0000000..4aa2b3f Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#4.png differ diff --git a/dist/images/creatures/Mummy (Ullek)#Ashes.png b/dist/images/creatures/Mummy (Ullek)#Ashes.png new file mode 100644 index 0000000..827357d Binary files /dev/null and b/dist/images/creatures/Mummy (Ullek)#Ashes.png differ diff --git a/dist/images/creatures/Mutated bloodveld#A.png b/dist/images/creatures/Mutated bloodveld#A.png new file mode 100644 index 0000000..ee6e495 Binary files /dev/null and b/dist/images/creatures/Mutated bloodveld#A.png differ diff --git a/dist/images/creatures/Mutated bloodveld#B.png b/dist/images/creatures/Mutated bloodveld#B.png new file mode 100644 index 0000000..031707e Binary files /dev/null and b/dist/images/creatures/Mutated bloodveld#B.png differ diff --git a/dist/images/creatures/Mutated jadinko baby#Default.png b/dist/images/creatures/Mutated jadinko baby#Default.png new file mode 100644 index 0000000..8b2ca1f Binary files /dev/null and b/dist/images/creatures/Mutated jadinko baby#Default.png differ diff --git a/dist/images/creatures/Mutated jadinko guard#Default.png b/dist/images/creatures/Mutated jadinko guard#Default.png new file mode 100644 index 0000000..faf8d6e Binary files /dev/null and b/dist/images/creatures/Mutated jadinko guard#Default.png differ diff --git a/dist/images/creatures/Mutated jadinko male#Default.png b/dist/images/creatures/Mutated jadinko male#Default.png new file mode 100644 index 0000000..eaf6f90 Binary files /dev/null and b/dist/images/creatures/Mutated jadinko male#Default.png differ diff --git a/dist/images/creatures/Mutated zygomite#Level 58.png b/dist/images/creatures/Mutated zygomite#Level 58.png new file mode 100644 index 0000000..bf890c1 Binary files /dev/null and b/dist/images/creatures/Mutated zygomite#Level 58.png differ diff --git a/dist/images/creatures/Mutated zygomite#Level 65.png b/dist/images/creatures/Mutated zygomite#Level 65.png new file mode 100644 index 0000000..bf890c1 Binary files /dev/null and b/dist/images/creatures/Mutated zygomite#Level 65.png differ diff --git a/dist/images/creatures/Nechryael (Heart of Gielinor)#Default.png b/dist/images/creatures/Nechryael (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..f0eb8a4 Binary files /dev/null and b/dist/images/creatures/Nechryael (Heart of Gielinor)#Default.png differ diff --git a/dist/images/creatures/Nechryael (elite)#Default.png b/dist/images/creatures/Nechryael (elite)#Default.png new file mode 100644 index 0000000..8b8f9ec Binary files /dev/null and b/dist/images/creatures/Nechryael (elite)#Default.png differ diff --git a/dist/images/creatures/Nechryael#Default.png b/dist/images/creatures/Nechryael#Default.png new file mode 100644 index 0000000..8b8f9ec Binary files /dev/null and b/dist/images/creatures/Nechryael#Default.png differ diff --git a/dist/images/creatures/Nex b/dist/images/creatures/Nex new file mode 100644 index 0000000..e69de29 diff --git a/dist/images/creatures/Nex#Magic.png b/dist/images/creatures/Nex#Magic.png new file mode 100644 index 0000000..e6c8d67 Binary files /dev/null and b/dist/images/creatures/Nex#Magic.png differ diff --git a/dist/images/creatures/Nex#Melee.png b/dist/images/creatures/Nex#Melee.png new file mode 100644 index 0000000..b57670c Binary files /dev/null and b/dist/images/creatures/Nex#Melee.png differ diff --git a/dist/images/creatures/Nex#Ranged.png b/dist/images/creatures/Nex#Ranged.png new file mode 100644 index 0000000..9492dde Binary files /dev/null and b/dist/images/creatures/Nex#Ranged.png differ diff --git a/dist/images/creatures/Nex#Standard.png b/dist/images/creatures/Nex#Standard.png new file mode 100644 index 0000000..cd0e5a0 Binary files /dev/null and b/dist/images/creatures/Nex#Standard.png differ diff --git a/dist/images/creatures/Nightmare#Default.png b/dist/images/creatures/Nightmare#Default.png new file mode 100644 index 0000000..110a416 Binary files /dev/null and b/dist/images/creatures/Nightmare#Default.png differ diff --git a/dist/images/creatures/Nodon artificer#Default.png b/dist/images/creatures/Nodon artificer#Default.png new file mode 100644 index 0000000..042a781 Binary files /dev/null and b/dist/images/creatures/Nodon artificer#Default.png differ diff --git a/dist/images/creatures/Nodon enforcer#Default.png b/dist/images/creatures/Nodon enforcer#Default.png new file mode 100644 index 0000000..69af25d Binary files /dev/null and b/dist/images/creatures/Nodon enforcer#Default.png differ diff --git a/dist/images/creatures/Nodon engineer#Default.png b/dist/images/creatures/Nodon engineer#Default.png new file mode 100644 index 0000000..7f5fe76 Binary files /dev/null and b/dist/images/creatures/Nodon engineer#Default.png differ diff --git a/dist/images/creatures/Nodon guard#Default.png b/dist/images/creatures/Nodon guard#Default.png new file mode 100644 index 0000000..b3366b3 Binary files /dev/null and b/dist/images/creatures/Nodon guard#Default.png differ diff --git a/dist/images/creatures/Nodon hunter#Default.png b/dist/images/creatures/Nodon hunter#Default.png new file mode 100644 index 0000000..7d98b83 Binary files /dev/null and b/dist/images/creatures/Nodon hunter#Default.png differ diff --git a/dist/images/creatures/Nymora, the Vengeful#Challenge Mode.png b/dist/images/creatures/Nymora, the Vengeful#Challenge Mode.png new file mode 100644 index 0000000..33e7244 Binary files /dev/null and b/dist/images/creatures/Nymora, the Vengeful#Challenge Mode.png differ diff --git a/dist/images/creatures/Nymora, the Vengeful#Normal Mode.png b/dist/images/creatures/Nymora, the Vengeful#Normal Mode.png new file mode 100644 index 0000000..33e7244 Binary files /dev/null and b/dist/images/creatures/Nymora, the Vengeful#Normal Mode.png differ diff --git a/dist/images/creatures/Ogre chieftain#Version 1.png b/dist/images/creatures/Ogre chieftain#Version 1.png new file mode 100644 index 0000000..0d7f692 Binary files /dev/null and b/dist/images/creatures/Ogre chieftain#Version 1.png differ diff --git a/dist/images/creatures/Ogre chieftain#Version 2.png b/dist/images/creatures/Ogre chieftain#Version 2.png new file mode 100644 index 0000000..621cf11 Binary files /dev/null and b/dist/images/creatures/Ogre chieftain#Version 2.png differ diff --git a/dist/images/creatures/Ogre chieftain#Version 3.png b/dist/images/creatures/Ogre chieftain#Version 3.png new file mode 100644 index 0000000..621cf11 Binary files /dev/null and b/dist/images/creatures/Ogre chieftain#Version 3.png differ diff --git a/dist/images/creatures/Ogre#Combat Camp(56).png b/dist/images/creatures/Ogre#Combat Camp(56).png new file mode 100644 index 0000000..afb08ea Binary files /dev/null and b/dist/images/creatures/Ogre#Combat Camp(56).png differ diff --git a/dist/images/creatures/Ogre#God Wars Dungeon(86).png b/dist/images/creatures/Ogre#God Wars Dungeon(86).png new file mode 100644 index 0000000..f0570ca Binary files /dev/null and b/dist/images/creatures/Ogre#God Wars Dungeon(86).png differ diff --git a/dist/images/creatures/Ogre#Kandarin(Level 67).png b/dist/images/creatures/Ogre#Kandarin(Level 67).png new file mode 100644 index 0000000..4fd1cfa Binary files /dev/null and b/dist/images/creatures/Ogre#Kandarin(Level 67).png differ diff --git a/dist/images/creatures/Ogress champion#Default.png b/dist/images/creatures/Ogress champion#Default.png new file mode 100644 index 0000000..97da5b7 Binary files /dev/null and b/dist/images/creatures/Ogress champion#Default.png differ diff --git a/dist/images/creatures/Ogress warrior#Default.png b/dist/images/creatures/Ogress warrior#Default.png new file mode 100644 index 0000000..e68d431 Binary files /dev/null and b/dist/images/creatures/Ogress warrior#Default.png differ diff --git a/dist/images/creatures/Ogress#Default.png b/dist/images/creatures/Ogress#Default.png new file mode 100644 index 0000000..5f0e961 Binary files /dev/null and b/dist/images/creatures/Ogress#Default.png differ diff --git a/dist/images/creatures/Ol' Sawtooth#Default.png b/dist/images/creatures/Ol' Sawtooth#Default.png new file mode 100644 index 0000000..ac25e9f Binary files /dev/null and b/dist/images/creatures/Ol' Sawtooth#Default.png differ diff --git a/dist/images/creatures/Onyx dragon (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Onyx dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..3fbf36d Binary files /dev/null and b/dist/images/creatures/Onyx dragon (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Onyx dragon#Default.png b/dist/images/creatures/Onyx dragon#Default.png new file mode 100644 index 0000000..3fbf36d Binary files /dev/null and b/dist/images/creatures/Onyx dragon#Default.png differ diff --git a/dist/images/creatures/Oomlie bird#Default.png b/dist/images/creatures/Oomlie bird#Default.png new file mode 100644 index 0000000..4253331 Binary files /dev/null and b/dist/images/creatures/Oomlie bird#Default.png differ diff --git a/dist/images/creatures/Oreb, the Magister#Default.png b/dist/images/creatures/Oreb, the Magister#Default.png new file mode 100644 index 0000000..64b21a8 Binary files /dev/null and b/dist/images/creatures/Oreb, the Magister#Default.png differ diff --git a/dist/images/creatures/Orikalka#Default.png b/dist/images/creatures/Orikalka#Default.png new file mode 100644 index 0000000..3cf47a0 Binary files /dev/null and b/dist/images/creatures/Orikalka#Default.png differ diff --git a/dist/images/creatures/Osseous#Default.png b/dist/images/creatures/Osseous#Default.png new file mode 100644 index 0000000..1471e99 Binary files /dev/null and b/dist/images/creatures/Osseous#Default.png differ diff --git a/dist/images/creatures/Otherworldly being#Default.png b/dist/images/creatures/Otherworldly being#Default.png new file mode 100644 index 0000000..dad9d60 Binary files /dev/null and b/dist/images/creatures/Otherworldly being#Default.png differ diff --git a/dist/images/creatures/Pee Hat#Default.png b/dist/images/creatures/Pee Hat#Default.png new file mode 100644 index 0000000..20ccdf4 Binary files /dev/null and b/dist/images/creatures/Pee Hat#Default.png differ diff --git a/dist/images/creatures/Pekin#Default.png b/dist/images/creatures/Pekin#Default.png new file mode 100644 index 0000000..7fe489e Binary files /dev/null and b/dist/images/creatures/Pekin#Default.png differ diff --git a/dist/images/creatures/Penguin (monster)#Default.png b/dist/images/creatures/Penguin (monster)#Default.png new file mode 100644 index 0000000..6ebc3a2 Binary files /dev/null and b/dist/images/creatures/Penguin (monster)#Default.png differ diff --git a/dist/images/creatures/Pernicious parrot#Default.png b/dist/images/creatures/Pernicious parrot#Default.png new file mode 100644 index 0000000..4520900 Binary files /dev/null and b/dist/images/creatures/Pernicious parrot#Default.png differ diff --git a/dist/images/creatures/Phantom sorcerer#1 (Ancient Awakening).png b/dist/images/creatures/Phantom sorcerer#1 (Ancient Awakening).png new file mode 100644 index 0000000..9eea1e4 Binary files /dev/null and b/dist/images/creatures/Phantom sorcerer#1 (Ancient Awakening).png differ diff --git a/dist/images/creatures/Phantom sorcerer#1 (hard Ungael combat activity).png b/dist/images/creatures/Phantom sorcerer#1 (hard Ungael combat activity).png new file mode 100644 index 0000000..f9124eb Binary files /dev/null and b/dist/images/creatures/Phantom sorcerer#1 (hard Ungael combat activity).png differ diff --git a/dist/images/creatures/Phantom sorcerer#1 (standard Ungael combat activity).png b/dist/images/creatures/Phantom sorcerer#1 (standard Ungael combat activity).png new file mode 100644 index 0000000..f9124eb Binary files /dev/null and b/dist/images/creatures/Phantom sorcerer#1 (standard Ungael combat activity).png differ diff --git a/dist/images/creatures/Phantom wizard#1 (Ancient Awakening).png b/dist/images/creatures/Phantom wizard#1 (Ancient Awakening).png new file mode 100644 index 0000000..fa7a657 Binary files /dev/null and b/dist/images/creatures/Phantom wizard#1 (Ancient Awakening).png differ diff --git a/dist/images/creatures/Phantom wizard#1 (Ungael combat activity).png b/dist/images/creatures/Phantom wizard#1 (Ungael combat activity).png new file mode 100644 index 0000000..fa7a657 Binary files /dev/null and b/dist/images/creatures/Phantom wizard#1 (Ungael combat activity).png differ diff --git a/dist/images/creatures/Pit Scorpion#Default.png b/dist/images/creatures/Pit Scorpion#Default.png new file mode 100644 index 0000000..ca4041e Binary files /dev/null and b/dist/images/creatures/Pit Scorpion#Default.png differ diff --git a/dist/images/creatures/Plague frog#Default.png b/dist/images/creatures/Plague frog#Default.png new file mode 100644 index 0000000..f2e9197 Binary files /dev/null and b/dist/images/creatures/Plague frog#Default.png differ diff --git a/dist/images/creatures/Poison Scorpion#Default.png b/dist/images/creatures/Poison Scorpion#Default.png new file mode 100644 index 0000000..0b747b6 Binary files /dev/null and b/dist/images/creatures/Poison Scorpion#Default.png differ diff --git a/dist/images/creatures/Poison spider#Common.png b/dist/images/creatures/Poison spider#Common.png new file mode 100644 index 0000000..d8bf00c Binary files /dev/null and b/dist/images/creatures/Poison spider#Common.png differ diff --git a/dist/images/creatures/Poison spider#Observatory.png b/dist/images/creatures/Poison spider#Observatory.png new file mode 100644 index 0000000..d8bf00c Binary files /dev/null and b/dist/images/creatures/Poison spider#Observatory.png differ diff --git a/dist/images/creatures/Possessed pickaxe (Lava Flow Mine)#Default.png b/dist/images/creatures/Possessed pickaxe (Lava Flow Mine)#Default.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/dist/images/creatures/Possessed pickaxe (Lava Flow Mine)#Default.png differ diff --git a/dist/images/creatures/Possessed pickaxe#Abandoned Mine.png b/dist/images/creatures/Possessed pickaxe#Abandoned Mine.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/dist/images/creatures/Possessed pickaxe#Abandoned Mine.png differ diff --git a/dist/images/creatures/Possessed pickaxe#Dominion Tower.png b/dist/images/creatures/Possessed pickaxe#Dominion Tower.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/dist/images/creatures/Possessed pickaxe#Dominion Tower.png differ diff --git a/dist/images/creatures/Possessed pickaxe#Lair of Tarn Razorlor.png b/dist/images/creatures/Possessed pickaxe#Lair of Tarn Razorlor.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/dist/images/creatures/Possessed pickaxe#Lair of Tarn Razorlor.png differ diff --git a/dist/images/creatures/Pthentraken#Default.png b/dist/images/creatures/Pthentraken#Default.png new file mode 100644 index 0000000..3c3d02a Binary files /dev/null and b/dist/images/creatures/Pthentraken#Default.png differ diff --git a/dist/images/creatures/Pyrefiend (The Zamorakian Undercity)#Default.png b/dist/images/creatures/Pyrefiend (The Zamorakian Undercity)#Default.png new file mode 100644 index 0000000..277cc93 Binary files /dev/null and b/dist/images/creatures/Pyrefiend (The Zamorakian Undercity)#Default.png differ diff --git a/dist/images/creatures/Pyrefiend (summoned)#Default.png b/dist/images/creatures/Pyrefiend (summoned)#Default.png new file mode 100644 index 0000000..90e4b78 Binary files /dev/null and b/dist/images/creatures/Pyrefiend (summoned)#Default.png differ diff --git a/dist/images/creatures/Pyrefiend#God Wars Dungeon.png b/dist/images/creatures/Pyrefiend#God Wars Dungeon.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/dist/images/creatures/Pyrefiend#God Wars Dungeon.png differ diff --git a/dist/images/creatures/Pyrefiend#Level 38.png b/dist/images/creatures/Pyrefiend#Level 38.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/dist/images/creatures/Pyrefiend#Level 38.png differ diff --git a/dist/images/creatures/Queen Black Dragon#Carapace.png b/dist/images/creatures/Queen Black Dragon#Carapace.png new file mode 100644 index 0000000..e909655 Binary files /dev/null and b/dist/images/creatures/Queen Black Dragon#Carapace.png differ diff --git a/dist/images/creatures/Queen Black Dragon#Crystal.png b/dist/images/creatures/Queen Black Dragon#Crystal.png new file mode 100644 index 0000000..a54f4e6 Binary files /dev/null and b/dist/images/creatures/Queen Black Dragon#Crystal.png differ diff --git a/dist/images/creatures/Queen Black Dragon#Normal.png b/dist/images/creatures/Queen Black Dragon#Normal.png new file mode 100644 index 0000000..5aaee7f Binary files /dev/null and b/dist/images/creatures/Queen Black Dragon#Normal.png differ diff --git a/dist/images/creatures/Quetzathog#Default.png b/dist/images/creatures/Quetzathog#Default.png new file mode 100644 index 0000000..8c5cc99 Binary files /dev/null and b/dist/images/creatures/Quetzathog#Default.png differ diff --git a/dist/images/creatures/Raksha, the Shadow Colossus#During fight (duo).png b/dist/images/creatures/Raksha, the Shadow Colossus#During fight (duo).png new file mode 100644 index 0000000..39c622c Binary files /dev/null and b/dist/images/creatures/Raksha, the Shadow Colossus#During fight (duo).png differ diff --git a/dist/images/creatures/Raksha, the Shadow Colossus#During fight.png b/dist/images/creatures/Raksha, the Shadow Colossus#During fight.png new file mode 100644 index 0000000..39c622c Binary files /dev/null and b/dist/images/creatures/Raksha, the Shadow Colossus#During fight.png differ diff --git a/dist/images/creatures/Raksha, the Shadow Colossus#Shackled.png b/dist/images/creatures/Raksha, the Shadow Colossus#Shackled.png new file mode 100644 index 0000000..1b408df Binary files /dev/null and b/dist/images/creatures/Raksha, the Shadow Colossus#Shackled.png differ diff --git a/dist/images/creatures/Raksha, the Shadow Colossus#Subdued.png b/dist/images/creatures/Raksha, the Shadow Colossus#Subdued.png new file mode 100644 index 0000000..bd4de47 Binary files /dev/null and b/dist/images/creatures/Raksha, the Shadow Colossus#Subdued.png differ diff --git a/dist/images/creatures/Rasial, the First Necromancer#Alpha vs Omega.png b/dist/images/creatures/Rasial, the First Necromancer#Alpha vs Omega.png new file mode 100644 index 0000000..8b95c2a Binary files /dev/null and b/dist/images/creatures/Rasial, the First Necromancer#Alpha vs Omega.png differ diff --git a/dist/images/creatures/Rasial, the First Necromancer#Normal.png b/dist/images/creatures/Rasial, the First Necromancer#Normal.png new file mode 100644 index 0000000..8b95c2a Binary files /dev/null and b/dist/images/creatures/Rasial, the First Necromancer#Normal.png differ diff --git a/dist/images/creatures/Rat#Common.png b/dist/images/creatures/Rat#Common.png new file mode 100644 index 0000000..803a17c Binary files /dev/null and b/dist/images/creatures/Rat#Common.png differ diff --git a/dist/images/creatures/Rat#Ratcatchers.png b/dist/images/creatures/Rat#Ratcatchers.png new file mode 100644 index 0000000..803a17c Binary files /dev/null and b/dist/images/creatures/Rat#Ratcatchers.png differ diff --git a/dist/images/creatures/Rat#Stronghold of Security.png b/dist/images/creatures/Rat#Stronghold of Security.png new file mode 100644 index 0000000..2cd7337 Binary files /dev/null and b/dist/images/creatures/Rat#Stronghold of Security.png differ diff --git a/dist/images/creatures/Rathis#Default.png b/dist/images/creatures/Rathis#Default.png new file mode 100644 index 0000000..7eecd86 Binary files /dev/null and b/dist/images/creatures/Rathis#Default.png differ diff --git a/dist/images/creatures/Ravenous ghoul (Mazchna)#Default.png b/dist/images/creatures/Ravenous ghoul (Mazchna)#Default.png new file mode 100644 index 0000000..3655789 Binary files /dev/null and b/dist/images/creatures/Ravenous ghoul (Mazchna)#Default.png differ diff --git a/dist/images/creatures/Ravenous ghoul#Default.png b/dist/images/creatures/Ravenous ghoul#Default.png new file mode 100644 index 0000000..9c0a459 Binary files /dev/null and b/dist/images/creatures/Ravenous ghoul#Default.png differ diff --git a/dist/images/creatures/Red dragon (Dragonkin Laboratory)#Default.png b/dist/images/creatures/Red dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..f5ef71b Binary files /dev/null and b/dist/images/creatures/Red dragon (Dragonkin Laboratory)#Default.png differ diff --git a/dist/images/creatures/Red dragon#1.png b/dist/images/creatures/Red dragon#1.png new file mode 100644 index 0000000..4d20989 Binary files /dev/null and b/dist/images/creatures/Red dragon#1.png differ diff --git a/dist/images/creatures/Red dragon#2.png b/dist/images/creatures/Red dragon#2.png new file mode 100644 index 0000000..08258c4 Binary files /dev/null and b/dist/images/creatures/Red dragon#2.png differ diff --git a/dist/images/creatures/Red dragon#3.png b/dist/images/creatures/Red dragon#3.png new file mode 100644 index 0000000..a031dd1 Binary files /dev/null and b/dist/images/creatures/Red dragon#3.png differ diff --git a/dist/images/creatures/Red dragon#4.png b/dist/images/creatures/Red dragon#4.png new file mode 100644 index 0000000..b9ac714 Binary files /dev/null and b/dist/images/creatures/Red dragon#4.png differ diff --git a/dist/images/creatures/Red dragon#5.png b/dist/images/creatures/Red dragon#5.png new file mode 100644 index 0000000..e4912e6 Binary files /dev/null and b/dist/images/creatures/Red dragon#5.png differ diff --git a/dist/images/creatures/Revenant cyclops#Default.png b/dist/images/creatures/Revenant cyclops#Default.png new file mode 100644 index 0000000..29b732d Binary files /dev/null and b/dist/images/creatures/Revenant cyclops#Default.png differ diff --git a/dist/images/creatures/Revenant dark beast#Default.png b/dist/images/creatures/Revenant dark beast#Default.png new file mode 100644 index 0000000..c3b002b Binary files /dev/null and b/dist/images/creatures/Revenant dark beast#Default.png differ diff --git a/dist/images/creatures/Revenant demon#Default.png b/dist/images/creatures/Revenant demon#Default.png new file mode 100644 index 0000000..114a3e6 Binary files /dev/null and b/dist/images/creatures/Revenant demon#Default.png differ diff --git a/dist/images/creatures/Revenant dragon#Default.png b/dist/images/creatures/Revenant dragon#Default.png new file mode 100644 index 0000000..eead49e Binary files /dev/null and b/dist/images/creatures/Revenant dragon#Default.png differ diff --git a/dist/images/creatures/Revenant goblin#16.png b/dist/images/creatures/Revenant goblin#16.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/dist/images/creatures/Revenant goblin#16.png differ diff --git a/dist/images/creatures/Revenant goblin#19.png b/dist/images/creatures/Revenant goblin#19.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/dist/images/creatures/Revenant goblin#19.png differ diff --git a/dist/images/creatures/Revenant goblin#22.png b/dist/images/creatures/Revenant goblin#22.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/dist/images/creatures/Revenant goblin#22.png differ diff --git a/dist/images/creatures/Revenant goblin#28.png b/dist/images/creatures/Revenant goblin#28.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/dist/images/creatures/Revenant goblin#28.png differ diff --git a/dist/images/creatures/Revenant hellhound#Default.png b/dist/images/creatures/Revenant hellhound#Default.png new file mode 100644 index 0000000..515fc2c Binary files /dev/null and b/dist/images/creatures/Revenant hellhound#Default.png differ diff --git a/dist/images/creatures/Revenant hobgoblin#Default.png b/dist/images/creatures/Revenant hobgoblin#Default.png new file mode 100644 index 0000000..09b447c Binary files /dev/null and b/dist/images/creatures/Revenant hobgoblin#Default.png differ diff --git a/dist/images/creatures/Revenant icefiend#Default.png b/dist/images/creatures/Revenant icefiend#Default.png new file mode 100644 index 0000000..02878a1 Binary files /dev/null and b/dist/images/creatures/Revenant icefiend#Default.png differ diff --git a/dist/images/creatures/Revenant imp#Default.png b/dist/images/creatures/Revenant imp#Default.png new file mode 100644 index 0000000..1cf1003 Binary files /dev/null and b/dist/images/creatures/Revenant imp#Default.png differ diff --git a/dist/images/creatures/Revenant knight#Default.png b/dist/images/creatures/Revenant knight#Default.png new file mode 100644 index 0000000..40d75f2 Binary files /dev/null and b/dist/images/creatures/Revenant knight#Default.png differ diff --git a/dist/images/creatures/Revenant ork#Default.png b/dist/images/creatures/Revenant ork#Default.png new file mode 100644 index 0000000..0d8762b Binary files /dev/null and b/dist/images/creatures/Revenant ork#Default.png differ diff --git a/dist/images/creatures/Revenant pyrefiend#Default.png b/dist/images/creatures/Revenant pyrefiend#Default.png new file mode 100644 index 0000000..356a29e Binary files /dev/null and b/dist/images/creatures/Revenant pyrefiend#Default.png differ diff --git a/dist/images/creatures/Revenant vampyre#Default.png b/dist/images/creatures/Revenant vampyre#Default.png new file mode 100644 index 0000000..766ab2e Binary files /dev/null and b/dist/images/creatures/Revenant vampyre#Default.png differ diff --git a/dist/images/creatures/Revenant werewolf#Default.png b/dist/images/creatures/Revenant werewolf#Default.png new file mode 100644 index 0000000..cf4acc5 Binary files /dev/null and b/dist/images/creatures/Revenant werewolf#Default.png differ diff --git a/dist/images/creatures/Ripper Demon#Default.png b/dist/images/creatures/Ripper Demon#Default.png new file mode 100644 index 0000000..2d3e248 Binary files /dev/null and b/dist/images/creatures/Ripper Demon#Default.png differ diff --git a/dist/images/creatures/Ripper dinosaur#Dinosaur invasion.png b/dist/images/creatures/Ripper dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..9d0362b Binary files /dev/null and b/dist/images/creatures/Ripper dinosaur#Dinosaur invasion.png differ diff --git a/dist/images/creatures/Ripper dinosaur#Normal.png b/dist/images/creatures/Ripper dinosaur#Normal.png new file mode 100644 index 0000000..9d0362b Binary files /dev/null and b/dist/images/creatures/Ripper dinosaur#Normal.png differ diff --git a/dist/images/creatures/Risen ghost#Default.png b/dist/images/creatures/Risen ghost#Default.png new file mode 100644 index 0000000..53220d3 Binary files /dev/null and b/dist/images/creatures/Risen ghost#Default.png differ diff --git a/dist/images/creatures/River troll#Default.png b/dist/images/creatures/River troll#Default.png new file mode 100644 index 0000000..4cfc7e3 Binary files /dev/null and b/dist/images/creatures/River troll#Default.png differ diff --git a/dist/images/creatures/Rock (monster)#Default.png b/dist/images/creatures/Rock (monster)#Default.png new file mode 100644 index 0000000..a3833fb Binary files /dev/null and b/dist/images/creatures/Rock (monster)#Default.png differ diff --git a/dist/images/creatures/Rock slug#Default.png b/dist/images/creatures/Rock slug#Default.png new file mode 100644 index 0000000..f319e48 Binary files /dev/null and b/dist/images/creatures/Rock slug#Default.png differ diff --git a/dist/images/creatures/Rooster#Default.png b/dist/images/creatures/Rooster#Default.png new file mode 100644 index 0000000..baf2a49 Binary files /dev/null and b/dist/images/creatures/Rooster#Default.png differ diff --git a/dist/images/creatures/Rorarius#1.png b/dist/images/creatures/Rorarius#1.png new file mode 100644 index 0000000..333dee8 Binary files /dev/null and b/dist/images/creatures/Rorarius#1.png differ diff --git a/dist/images/creatures/Rorarius#2.png b/dist/images/creatures/Rorarius#2.png new file mode 100644 index 0000000..edd0ea7 Binary files /dev/null and b/dist/images/creatures/Rorarius#2.png differ diff --git a/dist/images/creatures/Rune dragon#Armoured.png b/dist/images/creatures/Rune dragon#Armoured.png new file mode 100644 index 0000000..a67c163 Binary files /dev/null and b/dist/images/creatures/Rune dragon#Armoured.png differ diff --git a/dist/images/creatures/Rune dragon#Unarmoured.png b/dist/images/creatures/Rune dragon#Unarmoured.png new file mode 100644 index 0000000..3be7130 Binary files /dev/null and b/dist/images/creatures/Rune dragon#Unarmoured.png differ diff --git a/dist/images/creatures/Salawa akh#Default.png b/dist/images/creatures/Salawa akh#Default.png new file mode 100644 index 0000000..6364b5c Binary files /dev/null and b/dist/images/creatures/Salawa akh#Default.png differ diff --git a/dist/images/creatures/Sangri the Red#Default.png b/dist/images/creatures/Sangri the Red#Default.png new file mode 100644 index 0000000..f5ef71b Binary files /dev/null and b/dist/images/creatures/Sangri the Red#Default.png differ diff --git a/dist/images/creatures/Sapping glacyte#Default.png b/dist/images/creatures/Sapping glacyte#Default.png new file mode 100644 index 0000000..602995d Binary files /dev/null and b/dist/images/creatures/Sapping glacyte#Default.png differ diff --git a/dist/images/creatures/Scabaras lancer#Default.png b/dist/images/creatures/Scabaras lancer#Default.png new file mode 100644 index 0000000..a83c07c Binary files /dev/null and b/dist/images/creatures/Scabaras lancer#Default.png differ diff --git a/dist/images/creatures/Scabaras mage#Default.png b/dist/images/creatures/Scabaras mage#Default.png new file mode 100644 index 0000000..ffdb509 Binary files /dev/null and b/dist/images/creatures/Scabaras mage#Default.png differ diff --git a/dist/images/creatures/Scabaras ranger#Default.png b/dist/images/creatures/Scabaras ranger#Default.png new file mode 100644 index 0000000..1330925 Binary files /dev/null and b/dist/images/creatures/Scabaras ranger#Default.png differ diff --git a/dist/images/creatures/Scarab akh#Default.png b/dist/images/creatures/Scarab akh#Default.png new file mode 100644 index 0000000..81cca1b Binary files /dev/null and b/dist/images/creatures/Scarab akh#Default.png differ diff --git a/dist/images/creatures/Scarab mage#Contact!.png b/dist/images/creatures/Scarab mage#Contact!.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/dist/images/creatures/Scarab mage#Contact!.png differ diff --git a/dist/images/creatures/Scarab mage#Dominion Tower.png b/dist/images/creatures/Scarab mage#Dominion Tower.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/dist/images/creatures/Scarab mage#Dominion Tower.png differ diff --git a/dist/images/creatures/Scarab mage#Rumble Mode.png b/dist/images/creatures/Scarab mage#Rumble Mode.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/dist/images/creatures/Scarab mage#Rumble Mode.png differ diff --git a/dist/images/creatures/Scarab mage#Sophanem Dungeon.png b/dist/images/creatures/Scarab mage#Sophanem Dungeon.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/dist/images/creatures/Scarab mage#Sophanem Dungeon.png differ diff --git a/dist/images/creatures/Scorpion (Ape Atoll)#Default.png b/dist/images/creatures/Scorpion (Ape Atoll)#Default.png new file mode 100644 index 0000000..d1e3bb8 Binary files /dev/null and b/dist/images/creatures/Scorpion (Ape Atoll)#Default.png differ diff --git a/dist/images/creatures/Scorpion#Level 14.png b/dist/images/creatures/Scorpion#Level 14.png new file mode 100644 index 0000000..ca4041e Binary files /dev/null and b/dist/images/creatures/Scorpion#Level 14.png differ diff --git a/dist/images/creatures/Scorpion#Level 26 (Stronghold of Security, 1).png b/dist/images/creatures/Scorpion#Level 26 (Stronghold of Security, 1).png new file mode 100644 index 0000000..ca4041e Binary files /dev/null and b/dist/images/creatures/Scorpion#Level 26 (Stronghold of Security, 1).png differ diff --git a/dist/images/creatures/Scorpion#Level 26 (Stronghold of Security, 2).png b/dist/images/creatures/Scorpion#Level 26 (Stronghold of Security, 2).png new file mode 100644 index 0000000..0b747b6 Binary files /dev/null and b/dist/images/creatures/Scorpion#Level 26 (Stronghold of Security, 2).png differ diff --git a/dist/images/creatures/Scutarius#1.png b/dist/images/creatures/Scutarius#1.png new file mode 100644 index 0000000..d92f1e1 Binary files /dev/null and b/dist/images/creatures/Scutarius#1.png differ diff --git a/dist/images/creatures/Scutarius#2.png b/dist/images/creatures/Scutarius#2.png new file mode 100644 index 0000000..aa168a5 Binary files /dev/null and b/dist/images/creatures/Scutarius#2.png differ diff --git a/dist/images/creatures/Sea Snake Hatchling#Default.png b/dist/images/creatures/Sea Snake Hatchling#Default.png new file mode 100644 index 0000000..ce4be4e Binary files /dev/null and b/dist/images/creatures/Sea Snake Hatchling#Default.png differ diff --git a/dist/images/creatures/Sea Snake Young#Default.png b/dist/images/creatures/Sea Snake Young#Default.png new file mode 100644 index 0000000..731e379 Binary files /dev/null and b/dist/images/creatures/Sea Snake Young#Default.png differ diff --git a/dist/images/creatures/Sea crocodile#Normal mode.png b/dist/images/creatures/Sea crocodile#Normal mode.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/dist/images/creatures/Sea crocodile#Normal mode.png differ diff --git a/dist/images/creatures/Sea crocodile#Story mode.png b/dist/images/creatures/Sea crocodile#Story mode.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/dist/images/creatures/Sea crocodile#Story mode.png differ diff --git a/dist/images/creatures/Sea horror#Normal mode.png b/dist/images/creatures/Sea horror#Normal mode.png new file mode 100644 index 0000000..8c5cc99 Binary files /dev/null and b/dist/images/creatures/Sea horror#Normal mode.png differ diff --git a/dist/images/creatures/Sea horror#Story mode.png b/dist/images/creatures/Sea horror#Story mode.png new file mode 100644 index 0000000..8c5cc99 Binary files /dev/null and b/dist/images/creatures/Sea horror#Story mode.png differ diff --git a/dist/images/creatures/Seagull#Default.png b/dist/images/creatures/Seagull#Default.png new file mode 100644 index 0000000..d31d5eb Binary files /dev/null and b/dist/images/creatures/Seagull#Default.png differ diff --git a/dist/images/creatures/Seeker#Default.png b/dist/images/creatures/Seeker#Default.png new file mode 100644 index 0000000..4a85f8a Binary files /dev/null and b/dist/images/creatures/Seeker#Default.png differ diff --git a/dist/images/creatures/Seething Pyrefiend#Default.png b/dist/images/creatures/Seething Pyrefiend#Default.png new file mode 100644 index 0000000..ce5e21f Binary files /dev/null and b/dist/images/creatures/Seething Pyrefiend#Default.png differ diff --git a/dist/images/creatures/Seiryu the Azure Serpent#Normal mode.png b/dist/images/creatures/Seiryu the Azure Serpent#Normal mode.png new file mode 100644 index 0000000..d8488f5 Binary files /dev/null and b/dist/images/creatures/Seiryu the Azure Serpent#Normal mode.png differ diff --git a/dist/images/creatures/Seiryu the Azure Serpent#Story mode.png b/dist/images/creatures/Seiryu the Azure Serpent#Story mode.png new file mode 100644 index 0000000..d8488f5 Binary files /dev/null and b/dist/images/creatures/Seiryu the Azure Serpent#Story mode.png differ diff --git a/dist/images/creatures/Seren archer#Default.png b/dist/images/creatures/Seren archer#Default.png new file mode 100644 index 0000000..286369e Binary files /dev/null and b/dist/images/creatures/Seren archer#Default.png differ diff --git a/dist/images/creatures/Seren mage#Default.png b/dist/images/creatures/Seren mage#Default.png new file mode 100644 index 0000000..237fdcc Binary files /dev/null and b/dist/images/creatures/Seren mage#Default.png differ diff --git a/dist/images/creatures/Seren warrior#Default.png b/dist/images/creatures/Seren warrior#Default.png new file mode 100644 index 0000000..6206256 Binary files /dev/null and b/dist/images/creatures/Seren warrior#Default.png differ diff --git a/dist/images/creatures/Sergeant Grimspike#Default.png b/dist/images/creatures/Sergeant Grimspike#Default.png new file mode 100644 index 0000000..8c52c6d Binary files /dev/null and b/dist/images/creatures/Sergeant Grimspike#Default.png differ diff --git a/dist/images/creatures/Sergeant Steelwill#Default.png b/dist/images/creatures/Sergeant Steelwill#Default.png new file mode 100644 index 0000000..1f4315f Binary files /dev/null and b/dist/images/creatures/Sergeant Steelwill#Default.png differ diff --git a/dist/images/creatures/Sergeant Strongstack#Default.png b/dist/images/creatures/Sergeant Strongstack#Default.png new file mode 100644 index 0000000..3f63777 Binary files /dev/null and b/dist/images/creatures/Sergeant Strongstack#Default.png differ diff --git a/dist/images/creatures/Shade#Default.png b/dist/images/creatures/Shade#Default.png new file mode 100644 index 0000000..b728521 Binary files /dev/null and b/dist/images/creatures/Shade#Default.png differ diff --git a/dist/images/creatures/Shadow (Temple of Light)#Default.png b/dist/images/creatures/Shadow (Temple of Light)#Default.png new file mode 100644 index 0000000..5f9eedd Binary files /dev/null and b/dist/images/creatures/Shadow (Temple of Light)#Default.png differ diff --git a/dist/images/creatures/Shadow Hound#Default.png b/dist/images/creatures/Shadow Hound#Default.png new file mode 100644 index 0000000..228c2e4 Binary files /dev/null and b/dist/images/creatures/Shadow Hound#Default.png differ diff --git a/dist/images/creatures/Shadow nihil#boss.png b/dist/images/creatures/Shadow nihil#boss.png new file mode 100644 index 0000000..4014b94 Binary files /dev/null and b/dist/images/creatures/Shadow nihil#boss.png differ diff --git a/dist/images/creatures/Shadow nihil#normal.png b/dist/images/creatures/Shadow nihil#normal.png new file mode 100644 index 0000000..4014b94 Binary files /dev/null and b/dist/images/creatures/Shadow nihil#normal.png differ diff --git a/dist/images/creatures/Shadow spider#Default.png b/dist/images/creatures/Shadow spider#Default.png new file mode 100644 index 0000000..b17fb9d Binary files /dev/null and b/dist/images/creatures/Shadow spider#Default.png differ diff --git a/dist/images/creatures/Shadow warrior#Default.png b/dist/images/creatures/Shadow warrior#Default.png new file mode 100644 index 0000000..d9f769c Binary files /dev/null and b/dist/images/creatures/Shadow warrior#Default.png differ diff --git a/dist/images/creatures/Shara'Kor the Widowmaker#Default.png b/dist/images/creatures/Shara'Kor the Widowmaker#Default.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/dist/images/creatures/Shara'Kor the Widowmaker#Default.png differ diff --git a/dist/images/creatures/Siege engine#Default.png b/dist/images/creatures/Siege engine#Default.png new file mode 100644 index 0000000..e1eeae9 Binary files /dev/null and b/dist/images/creatures/Siege engine#Default.png differ diff --git a/dist/images/creatures/Skeletal Wyvern#1.png b/dist/images/creatures/Skeletal Wyvern#1.png new file mode 100644 index 0000000..7a5b794 Binary files /dev/null and b/dist/images/creatures/Skeletal Wyvern#1.png differ diff --git a/dist/images/creatures/Skeletal Wyvern#2.png b/dist/images/creatures/Skeletal Wyvern#2.png new file mode 100644 index 0000000..60502ad Binary files /dev/null and b/dist/images/creatures/Skeletal Wyvern#2.png differ diff --git a/dist/images/creatures/Skeletal Wyvern#3.png b/dist/images/creatures/Skeletal Wyvern#3.png new file mode 100644 index 0000000..35e8741 Binary files /dev/null and b/dist/images/creatures/Skeletal Wyvern#3.png differ diff --git a/dist/images/creatures/Skeletal Wyvern#4.png b/dist/images/creatures/Skeletal Wyvern#4.png new file mode 100644 index 0000000..bef95a3 Binary files /dev/null and b/dist/images/creatures/Skeletal Wyvern#4.png differ diff --git a/dist/images/creatures/Skeletal hand#Default.png b/dist/images/creatures/Skeletal hand#Default.png new file mode 100644 index 0000000..f0a8a9d Binary files /dev/null and b/dist/images/creatures/Skeletal hand#Default.png differ diff --git a/dist/images/creatures/Skeletal miner#Default.png b/dist/images/creatures/Skeletal miner#Default.png new file mode 100644 index 0000000..9407fb3 Binary files /dev/null and b/dist/images/creatures/Skeletal miner#Default.png differ diff --git a/dist/images/creatures/Skeleton (Ape Atoll)#Default.png b/dist/images/creatures/Skeleton (Ape Atoll)#Default.png new file mode 100644 index 0000000..3a1d323 Binary files /dev/null and b/dist/images/creatures/Skeleton (Ape Atoll)#Default.png differ diff --git a/dist/images/creatures/Skeleton (Barrows)#86.png b/dist/images/creatures/Skeleton (Barrows)#86.png new file mode 100644 index 0000000..5daac32 Binary files /dev/null and b/dist/images/creatures/Skeleton (Barrows)#86.png differ diff --git a/dist/images/creatures/Skeleton (Barrows)#88.png b/dist/images/creatures/Skeleton (Barrows)#88.png new file mode 100644 index 0000000..4851c28 Binary files /dev/null and b/dist/images/creatures/Skeleton (Barrows)#88.png differ diff --git a/dist/images/creatures/Skeleton (Dark Warriors' Fortress)#1.png b/dist/images/creatures/Skeleton (Dark Warriors' Fortress)#1.png new file mode 100644 index 0000000..2c3f678 Binary files /dev/null and b/dist/images/creatures/Skeleton (Dark Warriors' Fortress)#1.png differ diff --git a/dist/images/creatures/Skeleton (Dark Warriors' Fortress)#2.png b/dist/images/creatures/Skeleton (Dark Warriors' Fortress)#2.png new file mode 100644 index 0000000..47b2b1d Binary files /dev/null and b/dist/images/creatures/Skeleton (Dark Warriors' Fortress)#2.png differ diff --git a/dist/images/creatures/Skeleton (Heart of Gielinor)#Default.png b/dist/images/creatures/Skeleton (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..4b37510 Binary files /dev/null and b/dist/images/creatures/Skeleton (Heart of Gielinor)#Default.png differ diff --git a/dist/images/creatures/Skeleton (Lumbridge Catacombs)#Default.png b/dist/images/creatures/Skeleton (Lumbridge Catacombs)#Default.png new file mode 100644 index 0000000..19c22fe Binary files /dev/null and b/dist/images/creatures/Skeleton (Lumbridge Catacombs)#Default.png differ diff --git a/dist/images/creatures/Skeleton (Tarn's Lair)#1.png b/dist/images/creatures/Skeleton (Tarn's Lair)#1.png new file mode 100644 index 0000000..b585269 Binary files /dev/null and b/dist/images/creatures/Skeleton (Tarn's Lair)#1.png differ diff --git a/dist/images/creatures/Skeleton (Tarn's Lair)#2.png b/dist/images/creatures/Skeleton (Tarn's Lair)#2.png new file mode 100644 index 0000000..a320236 Binary files /dev/null and b/dist/images/creatures/Skeleton (Tarn's Lair)#2.png differ diff --git a/dist/images/creatures/Skeleton (Tarn's Lair)#8.png b/dist/images/creatures/Skeleton (Tarn's Lair)#8.png new file mode 100644 index 0000000..d7af462 Binary files /dev/null and b/dist/images/creatures/Skeleton (Tarn's Lair)#8.png differ diff --git a/dist/images/creatures/Skeleton (Temple Trekking)#18.png b/dist/images/creatures/Skeleton (Temple Trekking)#18.png new file mode 100644 index 0000000..1e04acd Binary files /dev/null and b/dist/images/creatures/Skeleton (Temple Trekking)#18.png differ diff --git a/dist/images/creatures/Skeleton (Temple Trekking)#Helmet.png b/dist/images/creatures/Skeleton (Temple Trekking)#Helmet.png new file mode 100644 index 0000000..61de178 Binary files /dev/null and b/dist/images/creatures/Skeleton (Temple Trekking)#Helmet.png differ diff --git a/dist/images/creatures/Skeleton (Temple Trekking)#No helmet.png b/dist/images/creatures/Skeleton (Temple Trekking)#No helmet.png new file mode 100644 index 0000000..a5ac528 Binary files /dev/null and b/dist/images/creatures/Skeleton (Temple Trekking)#No helmet.png differ diff --git a/dist/images/creatures/Skeleton (Ullek)#Axe.png b/dist/images/creatures/Skeleton (Ullek)#Axe.png new file mode 100644 index 0000000..5bb9d71 Binary files /dev/null and b/dist/images/creatures/Skeleton (Ullek)#Axe.png differ diff --git a/dist/images/creatures/Skeleton (Ullek)#Mace.png b/dist/images/creatures/Skeleton (Ullek)#Mace.png new file mode 100644 index 0000000..c361019 Binary files /dev/null and b/dist/images/creatures/Skeleton (Ullek)#Mace.png differ diff --git a/dist/images/creatures/Skeleton (Ullek)#Round shield.png b/dist/images/creatures/Skeleton (Ullek)#Round shield.png new file mode 100644 index 0000000..2a10826 Binary files /dev/null and b/dist/images/creatures/Skeleton (Ullek)#Round shield.png differ diff --git a/dist/images/creatures/Skeleton (Ullek)#Square shield.png b/dist/images/creatures/Skeleton (Ullek)#Square shield.png new file mode 100644 index 0000000..36acbd4 Binary files /dev/null and b/dist/images/creatures/Skeleton (Ullek)#Square shield.png differ diff --git a/dist/images/creatures/Skeleton (Ullek)#Warhammer.png b/dist/images/creatures/Skeleton (Ullek)#Warhammer.png new file mode 100644 index 0000000..9d68608 Binary files /dev/null and b/dist/images/creatures/Skeleton (Ullek)#Warhammer.png differ diff --git a/dist/images/creatures/Skeleton (Uncharted Isles)#Melee (With Weapons).png b/dist/images/creatures/Skeleton (Uncharted Isles)#Melee (With Weapons).png new file mode 100644 index 0000000..956ef9f Binary files /dev/null and b/dist/images/creatures/Skeleton (Uncharted Isles)#Melee (With Weapons).png differ diff --git a/dist/images/creatures/Skeleton (Uncharted Isles)#Melee (Without Weapons).png b/dist/images/creatures/Skeleton (Uncharted Isles)#Melee (Without Weapons).png new file mode 100644 index 0000000..64521d4 Binary files /dev/null and b/dist/images/creatures/Skeleton (Uncharted Isles)#Melee (Without Weapons).png differ diff --git a/dist/images/creatures/Skeleton (Uncharted Isles)#Ranged.png b/dist/images/creatures/Skeleton (Uncharted Isles)#Ranged.png new file mode 100644 index 0000000..f53a5f1 Binary files /dev/null and b/dist/images/creatures/Skeleton (Uncharted Isles)#Ranged.png differ diff --git a/dist/images/creatures/Skeleton Archer#Normal mode.png b/dist/images/creatures/Skeleton Archer#Normal mode.png new file mode 100644 index 0000000..b6eca66 Binary files /dev/null and b/dist/images/creatures/Skeleton Archer#Normal mode.png differ diff --git a/dist/images/creatures/Skeleton Archer#Story mode.png b/dist/images/creatures/Skeleton Archer#Story mode.png new file mode 100644 index 0000000..569eda6 Binary files /dev/null and b/dist/images/creatures/Skeleton Archer#Story mode.png differ diff --git a/dist/images/creatures/Skeleton Mage#Level 19.png b/dist/images/creatures/Skeleton Mage#Level 19.png new file mode 100644 index 0000000..b585269 Binary files /dev/null and b/dist/images/creatures/Skeleton Mage#Level 19.png differ diff --git a/dist/images/creatures/Skeleton Mage#Level 49.png b/dist/images/creatures/Skeleton Mage#Level 49.png new file mode 100644 index 0000000..b585269 Binary files /dev/null and b/dist/images/creatures/Skeleton Mage#Level 49.png differ diff --git a/dist/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ancient Awakening).png b/dist/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ancient Awakening).png new file mode 100644 index 0000000..c08b3ad Binary files /dev/null and b/dist/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ancient Awakening).png differ diff --git a/dist/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ungael combat activity).png b/dist/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ungael combat activity).png new file mode 100644 index 0000000..c08b3ad Binary files /dev/null and b/dist/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ungael combat activity).png differ diff --git a/dist/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ancient Awakening).png b/dist/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ancient Awakening).png new file mode 100644 index 0000000..5a19d12 Binary files /dev/null and b/dist/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ancient Awakening).png differ diff --git a/dist/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ungael combat activity).png b/dist/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ungael combat activity).png new file mode 100644 index 0000000..8fe9759 Binary files /dev/null and b/dist/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ungael combat activity).png differ diff --git a/dist/images/creatures/Skeleton brute#Default.png b/dist/images/creatures/Skeleton brute#Default.png new file mode 100644 index 0000000..7df9d34 Binary files /dev/null and b/dist/images/creatures/Skeleton brute#Default.png differ diff --git a/dist/images/creatures/Skeleton fremennik#Level 23.png b/dist/images/creatures/Skeleton fremennik#Level 23.png new file mode 100644 index 0000000..1648cf6 Binary files /dev/null and b/dist/images/creatures/Skeleton fremennik#Level 23.png differ diff --git a/dist/images/creatures/Skeleton fremennik#Level 28.png b/dist/images/creatures/Skeleton fremennik#Level 28.png new file mode 100644 index 0000000..1648cf6 Binary files /dev/null and b/dist/images/creatures/Skeleton fremennik#Level 28.png differ diff --git a/dist/images/creatures/Skeleton fremennik#Level 30.png b/dist/images/creatures/Skeleton fremennik#Level 30.png new file mode 100644 index 0000000..1648cf6 Binary files /dev/null and b/dist/images/creatures/Skeleton fremennik#Level 30.png differ diff --git a/dist/images/creatures/Skeleton heavy#Default.png b/dist/images/creatures/Skeleton heavy#Default.png new file mode 100644 index 0000000..c9558bb Binary files /dev/null and b/dist/images/creatures/Skeleton heavy#Default.png differ diff --git a/dist/images/creatures/Skeleton hero#Default.png b/dist/images/creatures/Skeleton hero#Default.png new file mode 100644 index 0000000..1f9c8ce Binary files /dev/null and b/dist/images/creatures/Skeleton hero#Default.png differ diff --git a/dist/images/creatures/Skeleton knight#Ancient Awakening.png b/dist/images/creatures/Skeleton knight#Ancient Awakening.png new file mode 100644 index 0000000..65c8648 Binary files /dev/null and b/dist/images/creatures/Skeleton knight#Ancient Awakening.png differ diff --git a/dist/images/creatures/Skeleton knight#Ungael combat activity (hard).png b/dist/images/creatures/Skeleton knight#Ungael combat activity (hard).png new file mode 100644 index 0000000..65c8648 Binary files /dev/null and b/dist/images/creatures/Skeleton knight#Ungael combat activity (hard).png differ diff --git a/dist/images/creatures/Skeleton knight#Ungael combat activity (standard).png b/dist/images/creatures/Skeleton knight#Ungael combat activity (standard).png new file mode 100644 index 0000000..65c8648 Binary files /dev/null and b/dist/images/creatures/Skeleton knight#Ungael combat activity (standard).png differ diff --git a/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ancient Awakening.png b/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ancient Awakening.png new file mode 100644 index 0000000..f2ad3a0 Binary files /dev/null and b/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ancient Awakening.png differ diff --git a/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (hard).png b/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (hard).png new file mode 100644 index 0000000..f2ad3a0 Binary files /dev/null and b/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (hard).png differ diff --git a/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (standard).png b/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (standard).png new file mode 100644 index 0000000..f2ad3a0 Binary files /dev/null and b/dist/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (standard).png differ diff --git a/dist/images/creatures/Skeleton thug#Default.png b/dist/images/creatures/Skeleton thug#Default.png new file mode 100644 index 0000000..27d1817 Binary files /dev/null and b/dist/images/creatures/Skeleton thug#Default.png differ diff --git a/dist/images/creatures/Skeleton warlord#Default.png b/dist/images/creatures/Skeleton warlord#Default.png new file mode 100644 index 0000000..0dfbf69 Binary files /dev/null and b/dist/images/creatures/Skeleton warlord#Default.png differ diff --git a/dist/images/creatures/Skeleton warrior (Ancient Awakening)#Default.png b/dist/images/creatures/Skeleton warrior (Ancient Awakening)#Default.png new file mode 100644 index 0000000..cf5e798 Binary files /dev/null and b/dist/images/creatures/Skeleton warrior (Ancient Awakening)#Default.png differ diff --git a/dist/images/creatures/Skeleton#Level 15.png b/dist/images/creatures/Skeleton#Level 15.png new file mode 100644 index 0000000..835db36 Binary files /dev/null and b/dist/images/creatures/Skeleton#Level 15.png differ diff --git a/dist/images/creatures/Skeleton#Level 16.png b/dist/images/creatures/Skeleton#Level 16.png new file mode 100644 index 0000000..5b19b37 Binary files /dev/null and b/dist/images/creatures/Skeleton#Level 16.png differ diff --git a/dist/images/creatures/Skeleton#Level 32.png b/dist/images/creatures/Skeleton#Level 32.png new file mode 100644 index 0000000..a06d8bf Binary files /dev/null and b/dist/images/creatures/Skeleton#Level 32.png differ diff --git a/dist/images/creatures/Skeleton#Level 46.png b/dist/images/creatures/Skeleton#Level 46.png new file mode 100644 index 0000000..36d1992 Binary files /dev/null and b/dist/images/creatures/Skeleton#Level 46.png differ diff --git a/dist/images/creatures/Skeleton#Level 51.png b/dist/images/creatures/Skeleton#Level 51.png new file mode 100644 index 0000000..1a4c652 Binary files /dev/null and b/dist/images/creatures/Skeleton#Level 51.png differ diff --git a/dist/images/creatures/Skeleton#Level 58.png b/dist/images/creatures/Skeleton#Level 58.png new file mode 100644 index 0000000..d75c2fa Binary files /dev/null and b/dist/images/creatures/Skeleton#Level 58.png differ diff --git a/dist/images/creatures/Skoblin#Default.png b/dist/images/creatures/Skoblin#Default.png new file mode 100644 index 0000000..ae08ccb Binary files /dev/null and b/dist/images/creatures/Skoblin#Default.png differ diff --git a/dist/images/creatures/Skogre#1.png b/dist/images/creatures/Skogre#1.png new file mode 100644 index 0000000..d2dca13 Binary files /dev/null and b/dist/images/creatures/Skogre#1.png differ diff --git a/dist/images/creatures/Skogre#2.png b/dist/images/creatures/Skogre#2.png new file mode 100644 index 0000000..d2dca13 Binary files /dev/null and b/dist/images/creatures/Skogre#2.png differ diff --git a/dist/images/creatures/Skogre#3.png b/dist/images/creatures/Skogre#3.png new file mode 100644 index 0000000..d2dca13 Binary files /dev/null and b/dist/images/creatures/Skogre#3.png differ diff --git a/dist/images/creatures/Slasher Demon#Default.png b/dist/images/creatures/Slasher Demon#Default.png new file mode 100644 index 0000000..2d3e248 Binary files /dev/null and b/dist/images/creatures/Slasher Demon#Default.png differ diff --git a/dist/images/creatures/Small Lizard#Green.png b/dist/images/creatures/Small Lizard#Green.png new file mode 100644 index 0000000..963d4ee Binary files /dev/null and b/dist/images/creatures/Small Lizard#Green.png differ diff --git a/dist/images/creatures/Small Lizard#Yellow.png b/dist/images/creatures/Small Lizard#Yellow.png new file mode 100644 index 0000000..70b5b54 Binary files /dev/null and b/dist/images/creatures/Small Lizard#Yellow.png differ diff --git a/dist/images/creatures/Small scarab#Do No Evil.png b/dist/images/creatures/Small scarab#Do No Evil.png new file mode 100644 index 0000000..0583c1b Binary files /dev/null and b/dist/images/creatures/Small scarab#Do No Evil.png differ diff --git a/dist/images/creatures/Small scarab#Uzer Mastaba.png b/dist/images/creatures/Small scarab#Uzer Mastaba.png new file mode 100644 index 0000000..ad9064e Binary files /dev/null and b/dist/images/creatures/Small scarab#Uzer Mastaba.png differ diff --git a/dist/images/creatures/Small scarab#Zombie (1).png b/dist/images/creatures/Small scarab#Zombie (1).png new file mode 100644 index 0000000..5c6ab9f Binary files /dev/null and b/dist/images/creatures/Small scarab#Zombie (1).png differ diff --git a/dist/images/creatures/Small scarab#Zombie (2).png b/dist/images/creatures/Small scarab#Zombie (2).png new file mode 100644 index 0000000..d5baa3e Binary files /dev/null and b/dist/images/creatures/Small scarab#Zombie (2).png differ diff --git a/dist/images/creatures/Small scarab#Zombie (3).png b/dist/images/creatures/Small scarab#Zombie (3).png new file mode 100644 index 0000000..a4f0de3 Binary files /dev/null and b/dist/images/creatures/Small scarab#Zombie (3).png differ diff --git a/dist/images/creatures/Smoke nihil#boss.png b/dist/images/creatures/Smoke nihil#boss.png new file mode 100644 index 0000000..e4622da Binary files /dev/null and b/dist/images/creatures/Smoke nihil#boss.png differ diff --git a/dist/images/creatures/Smoke nihil#normal.png b/dist/images/creatures/Smoke nihil#normal.png new file mode 100644 index 0000000..e4622da Binary files /dev/null and b/dist/images/creatures/Smoke nihil#normal.png differ diff --git a/dist/images/creatures/Smoulders#Default.png b/dist/images/creatures/Smoulders#Default.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/dist/images/creatures/Smoulders#Default.png differ diff --git a/dist/images/creatures/Smoulders, the Revenger#Default.png b/dist/images/creatures/Smoulders, the Revenger#Default.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/dist/images/creatures/Smoulders, the Revenger#Default.png differ diff --git a/dist/images/creatures/Solak#Left arm.png b/dist/images/creatures/Solak#Left arm.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/dist/images/creatures/Solak#Left arm.png differ diff --git a/dist/images/creatures/Solak#Left leg.png b/dist/images/creatures/Solak#Left leg.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/dist/images/creatures/Solak#Left leg.png differ diff --git a/dist/images/creatures/Solak#Right arm.png b/dist/images/creatures/Solak#Right arm.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/dist/images/creatures/Solak#Right arm.png differ diff --git a/dist/images/creatures/Solak#Right leg.png b/dist/images/creatures/Solak#Right leg.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/dist/images/creatures/Solak#Right leg.png differ diff --git a/dist/images/creatures/Solak#Solak.png b/dist/images/creatures/Solak#Solak.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/dist/images/creatures/Solak#Solak.png differ diff --git a/dist/images/creatures/Solak#Withering.png b/dist/images/creatures/Solak#Withering.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/dist/images/creatures/Solak#Withering.png differ diff --git a/dist/images/creatures/Soulgazer (elite)#Default.png b/dist/images/creatures/Soulgazer (elite)#Default.png new file mode 100644 index 0000000..0a7fe08 Binary files /dev/null and b/dist/images/creatures/Soulgazer (elite)#Default.png differ diff --git a/dist/images/creatures/Soulgazer#Default.png b/dist/images/creatures/Soulgazer#Default.png new file mode 100644 index 0000000..0a7fe08 Binary files /dev/null and b/dist/images/creatures/Soulgazer#Default.png differ diff --git a/dist/images/creatures/Soulless armoured zombie#Default.png b/dist/images/creatures/Soulless armoured zombie#Default.png new file mode 100644 index 0000000..fcc0b40 Binary files /dev/null and b/dist/images/creatures/Soulless armoured zombie#Default.png differ diff --git a/dist/images/creatures/Soulless unarmoured zombie#Default.png b/dist/images/creatures/Soulless unarmoured zombie#Default.png new file mode 100644 index 0000000..fcc0b40 Binary files /dev/null and b/dist/images/creatures/Soulless unarmoured zombie#Default.png differ diff --git a/dist/images/creatures/Spider#Ape Atoll.png b/dist/images/creatures/Spider#Ape Atoll.png new file mode 100644 index 0000000..f44e18a Binary files /dev/null and b/dist/images/creatures/Spider#Ape Atoll.png differ diff --git a/dist/images/creatures/Spider#Common.png b/dist/images/creatures/Spider#Common.png new file mode 100644 index 0000000..ea6a406 Binary files /dev/null and b/dist/images/creatures/Spider#Common.png differ diff --git a/dist/images/creatures/Spider#Stronghold of Security.png b/dist/images/creatures/Spider#Stronghold of Security.png new file mode 100644 index 0000000..be650ef Binary files /dev/null and b/dist/images/creatures/Spider#Stronghold of Security.png differ diff --git a/dist/images/creatures/Spider#Underground Pass.png b/dist/images/creatures/Spider#Underground Pass.png new file mode 100644 index 0000000..be650ef Binary files /dev/null and b/dist/images/creatures/Spider#Underground Pass.png differ diff --git a/dist/images/creatures/Spiritual mage#Armadyl.png b/dist/images/creatures/Spiritual mage#Armadyl.png new file mode 100644 index 0000000..22e9413 Binary files /dev/null and b/dist/images/creatures/Spiritual mage#Armadyl.png differ diff --git a/dist/images/creatures/Spiritual mage#Bandos.png b/dist/images/creatures/Spiritual mage#Bandos.png new file mode 100644 index 0000000..bb800f4 Binary files /dev/null and b/dist/images/creatures/Spiritual mage#Bandos.png differ diff --git a/dist/images/creatures/Spiritual mage#Saradomin.png b/dist/images/creatures/Spiritual mage#Saradomin.png new file mode 100644 index 0000000..2ad148d Binary files /dev/null and b/dist/images/creatures/Spiritual mage#Saradomin.png differ diff --git a/dist/images/creatures/Spiritual mage#The World Wakes.png b/dist/images/creatures/Spiritual mage#The World Wakes.png new file mode 100644 index 0000000..2ad148d Binary files /dev/null and b/dist/images/creatures/Spiritual mage#The World Wakes.png differ diff --git a/dist/images/creatures/Spiritual mage#Zamorak.png b/dist/images/creatures/Spiritual mage#Zamorak.png new file mode 100644 index 0000000..8df06f2 Binary files /dev/null and b/dist/images/creatures/Spiritual mage#Zamorak.png differ diff --git a/dist/images/creatures/Spiritual ranger#Armadyl.png b/dist/images/creatures/Spiritual ranger#Armadyl.png new file mode 100644 index 0000000..49c575e Binary files /dev/null and b/dist/images/creatures/Spiritual ranger#Armadyl.png differ diff --git a/dist/images/creatures/Spiritual ranger#Bandos.png b/dist/images/creatures/Spiritual ranger#Bandos.png new file mode 100644 index 0000000..365e69d Binary files /dev/null and b/dist/images/creatures/Spiritual ranger#Bandos.png differ diff --git a/dist/images/creatures/Spiritual ranger#Saradomin.png b/dist/images/creatures/Spiritual ranger#Saradomin.png new file mode 100644 index 0000000..0bd03b5 Binary files /dev/null and b/dist/images/creatures/Spiritual ranger#Saradomin.png differ diff --git a/dist/images/creatures/Spiritual ranger#The World Wakes.png b/dist/images/creatures/Spiritual ranger#The World Wakes.png new file mode 100644 index 0000000..0bd03b5 Binary files /dev/null and b/dist/images/creatures/Spiritual ranger#The World Wakes.png differ diff --git a/dist/images/creatures/Spiritual ranger#Zamorak.png b/dist/images/creatures/Spiritual ranger#Zamorak.png new file mode 100644 index 0000000..042b315 Binary files /dev/null and b/dist/images/creatures/Spiritual ranger#Zamorak.png differ diff --git a/dist/images/creatures/Spiritual warrior#Armadyl.png b/dist/images/creatures/Spiritual warrior#Armadyl.png new file mode 100644 index 0000000..d79e1c7 Binary files /dev/null and b/dist/images/creatures/Spiritual warrior#Armadyl.png differ diff --git a/dist/images/creatures/Spiritual warrior#Bandos.png b/dist/images/creatures/Spiritual warrior#Bandos.png new file mode 100644 index 0000000..1e957f9 Binary files /dev/null and b/dist/images/creatures/Spiritual warrior#Bandos.png differ diff --git a/dist/images/creatures/Spiritual warrior#Saradomin.png b/dist/images/creatures/Spiritual warrior#Saradomin.png new file mode 100644 index 0000000..2536b63 Binary files /dev/null and b/dist/images/creatures/Spiritual warrior#Saradomin.png differ diff --git a/dist/images/creatures/Spiritual warrior#The World Wakes.png b/dist/images/creatures/Spiritual warrior#The World Wakes.png new file mode 100644 index 0000000..2536b63 Binary files /dev/null and b/dist/images/creatures/Spiritual warrior#The World Wakes.png differ diff --git a/dist/images/creatures/Spiritual warrior#Zamorak.png b/dist/images/creatures/Spiritual warrior#Zamorak.png new file mode 100644 index 0000000..b5ca763 Binary files /dev/null and b/dist/images/creatures/Spiritual warrior#Zamorak.png differ diff --git a/dist/images/creatures/Spyndra#Normal mode.png b/dist/images/creatures/Spyndra#Normal mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/dist/images/creatures/Spyndra#Normal mode.png differ diff --git a/dist/images/creatures/Spyndra#Story mode.png b/dist/images/creatures/Spyndra#Story mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/dist/images/creatures/Spyndra#Story mode.png differ diff --git a/dist/images/creatures/Steel dragon#Default.png b/dist/images/creatures/Steel dragon#Default.png new file mode 100644 index 0000000..b697fd5 Binary files /dev/null and b/dist/images/creatures/Steel dragon#Default.png differ diff --git a/dist/images/creatures/Stick#Default.png b/dist/images/creatures/Stick#Default.png new file mode 100644 index 0000000..4f5e5d8 Binary files /dev/null and b/dist/images/creatures/Stick#Default.png differ diff --git a/dist/images/creatures/Stinkears#Default.png b/dist/images/creatures/Stinkears#Default.png new file mode 100644 index 0000000..36b11ab Binary files /dev/null and b/dist/images/creatures/Stinkears#Default.png differ diff --git a/dist/images/creatures/Stove#Default.png b/dist/images/creatures/Stove#Default.png new file mode 100644 index 0000000..6f073d4 Binary files /dev/null and b/dist/images/creatures/Stove#Default.png differ diff --git a/dist/images/creatures/Summoned Zombie (The Shadow Reef)#Normal mode.png b/dist/images/creatures/Summoned Zombie (The Shadow Reef)#Normal mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/dist/images/creatures/Summoned Zombie (The Shadow Reef)#Normal mode.png differ diff --git a/dist/images/creatures/Summoned Zombie (The Shadow Reef)#Story mode.png b/dist/images/creatures/Summoned Zombie (The Shadow Reef)#Story mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/dist/images/creatures/Summoned Zombie (The Shadow Reef)#Story mode.png differ diff --git a/dist/images/creatures/Summoned Zombie#Default.png b/dist/images/creatures/Summoned Zombie#Default.png new file mode 100644 index 0000000..1b2c1ed Binary files /dev/null and b/dist/images/creatures/Summoned Zombie#Default.png differ diff --git a/dist/images/creatures/Summoned armoured zombie#Normal mode.png b/dist/images/creatures/Summoned armoured zombie#Normal mode.png new file mode 100644 index 0000000..8374d31 Binary files /dev/null and b/dist/images/creatures/Summoned armoured zombie#Normal mode.png differ diff --git a/dist/images/creatures/Summoned armoured zombie#Story mode.png b/dist/images/creatures/Summoned armoured zombie#Story mode.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/dist/images/creatures/Summoned armoured zombie#Story mode.png differ diff --git a/dist/images/creatures/Summoned skeleton archer#Normal mode.png b/dist/images/creatures/Summoned skeleton archer#Normal mode.png new file mode 100644 index 0000000..ec1baa0 Binary files /dev/null and b/dist/images/creatures/Summoned skeleton archer#Normal mode.png differ diff --git a/dist/images/creatures/Summoned skeleton archer#Story mode.png b/dist/images/creatures/Summoned skeleton archer#Story mode.png new file mode 100644 index 0000000..ec1baa0 Binary files /dev/null and b/dist/images/creatures/Summoned skeleton archer#Story mode.png differ diff --git a/dist/images/creatures/Summoned skeleton#Normal mode.png b/dist/images/creatures/Summoned skeleton#Normal mode.png new file mode 100644 index 0000000..51df0ec Binary files /dev/null and b/dist/images/creatures/Summoned skeleton#Normal mode.png differ diff --git a/dist/images/creatures/Summoned skeleton#Story mode.png b/dist/images/creatures/Summoned skeleton#Story mode.png new file mode 100644 index 0000000..51df0ec Binary files /dev/null and b/dist/images/creatures/Summoned skeleton#Story mode.png differ diff --git a/dist/images/creatures/Super Cow#Default.png b/dist/images/creatures/Super Cow#Default.png new file mode 100644 index 0000000..d7c1d2b Binary files /dev/null and b/dist/images/creatures/Super Cow#Default.png differ diff --git a/dist/images/creatures/Suqah#Level 73 (Dual wielding swords).png b/dist/images/creatures/Suqah#Level 73 (Dual wielding swords).png new file mode 100644 index 0000000..f946cdc Binary files /dev/null and b/dist/images/creatures/Suqah#Level 73 (Dual wielding swords).png differ diff --git a/dist/images/creatures/Suqah#Level 74 (Magic).png b/dist/images/creatures/Suqah#Level 74 (Magic).png new file mode 100644 index 0000000..58890b3 Binary files /dev/null and b/dist/images/creatures/Suqah#Level 74 (Magic).png differ diff --git a/dist/images/creatures/Suqah#Level 74.png b/dist/images/creatures/Suqah#Level 74.png new file mode 100644 index 0000000..58890b3 Binary files /dev/null and b/dist/images/creatures/Suqah#Level 74.png differ diff --git a/dist/images/creatures/Suqah#Level 79.png b/dist/images/creatures/Suqah#Level 79.png new file mode 100644 index 0000000..58890b3 Binary files /dev/null and b/dist/images/creatures/Suqah#Level 79.png differ diff --git a/dist/images/creatures/Swamp frog#Default.png b/dist/images/creatures/Swamp frog#Default.png new file mode 100644 index 0000000..5054b8b Binary files /dev/null and b/dist/images/creatures/Swamp frog#Default.png differ diff --git a/dist/images/creatures/Taraket the Necromancer#Normal mode.png b/dist/images/creatures/Taraket the Necromancer#Normal mode.png new file mode 100644 index 0000000..bf20f57 Binary files /dev/null and b/dist/images/creatures/Taraket the Necromancer#Normal mode.png differ diff --git a/dist/images/creatures/Taraket the Necromancer#Story mode.png b/dist/images/creatures/Taraket the Necromancer#Story mode.png new file mode 100644 index 0000000..bf20f57 Binary files /dev/null and b/dist/images/creatures/Taraket the Necromancer#Story mode.png differ diff --git a/dist/images/creatures/Telos, the Warden#Dormant.png b/dist/images/creatures/Telos, the Warden#Dormant.png new file mode 100644 index 0000000..b44dffc Binary files /dev/null and b/dist/images/creatures/Telos, the Warden#Dormant.png differ diff --git a/dist/images/creatures/Telos, the Warden#Phase 5.png b/dist/images/creatures/Telos, the Warden#Phase 5.png new file mode 100644 index 0000000..f85f55d Binary files /dev/null and b/dist/images/creatures/Telos, the Warden#Phase 5.png differ diff --git a/dist/images/creatures/Telos, the Warden#Standard.png b/dist/images/creatures/Telos, the Warden#Standard.png new file mode 100644 index 0000000..6ef2ba6 Binary files /dev/null and b/dist/images/creatures/Telos, the Warden#Standard.png differ diff --git a/dist/images/creatures/Tenacious toucan#Default.png b/dist/images/creatures/Tenacious toucan#Default.png new file mode 100644 index 0000000..531785d Binary files /dev/null and b/dist/images/creatures/Tenacious toucan#Default.png differ diff --git a/dist/images/creatures/Terror dog#Level 61.png b/dist/images/creatures/Terror dog#Level 61.png new file mode 100644 index 0000000..64b4982 Binary files /dev/null and b/dist/images/creatures/Terror dog#Level 61.png differ diff --git a/dist/images/creatures/Terror dog#Level 65.png b/dist/images/creatures/Terror dog#Level 65.png new file mode 100644 index 0000000..64b4982 Binary files /dev/null and b/dist/images/creatures/Terror dog#Level 65.png differ diff --git a/dist/images/creatures/Terrorbird#Default.png b/dist/images/creatures/Terrorbird#Default.png new file mode 100644 index 0000000..38b3611 Binary files /dev/null and b/dist/images/creatures/Terrorbird#Default.png differ diff --git a/dist/images/creatures/The Ambassador#Normal mode.png b/dist/images/creatures/The Ambassador#Normal mode.png new file mode 100644 index 0000000..019f7d0 Binary files /dev/null and b/dist/images/creatures/The Ambassador#Normal mode.png differ diff --git a/dist/images/creatures/The Ambassador#Story mode.png b/dist/images/creatures/The Ambassador#Story mode.png new file mode 100644 index 0000000..019f7d0 Binary files /dev/null and b/dist/images/creatures/The Ambassador#Story mode.png differ diff --git a/dist/images/creatures/The Magister#Default.png b/dist/images/creatures/The Magister#Default.png new file mode 100644 index 0000000..e895759 Binary files /dev/null and b/dist/images/creatures/The Magister#Default.png differ diff --git a/dist/images/creatures/Thrower Troll#Death Plateau.png b/dist/images/creatures/Thrower Troll#Death Plateau.png new file mode 100644 index 0000000..9145f53 Binary files /dev/null and b/dist/images/creatures/Thrower Troll#Death Plateau.png differ diff --git a/dist/images/creatures/Thrower Troll#Trollheim.png b/dist/images/creatures/Thrower Troll#Trollheim.png new file mode 100644 index 0000000..9145f53 Binary files /dev/null and b/dist/images/creatures/Thrower Troll#Trollheim.png differ diff --git a/dist/images/creatures/Throwing muspah#Default.png b/dist/images/creatures/Throwing muspah#Default.png new file mode 100644 index 0000000..99c5bfb Binary files /dev/null and b/dist/images/creatures/Throwing muspah#Default.png differ diff --git a/dist/images/creatures/Torag the Corrupted#Normal.png b/dist/images/creatures/Torag the Corrupted#Normal.png new file mode 100644 index 0000000..f16bd70 Binary files /dev/null and b/dist/images/creatures/Torag the Corrupted#Normal.png differ diff --git a/dist/images/creatures/Torag the Corrupted#Rise of the Six.png b/dist/images/creatures/Torag the Corrupted#Rise of the Six.png new file mode 100644 index 0000000..14bfa6c Binary files /dev/null and b/dist/images/creatures/Torag the Corrupted#Rise of the Six.png differ diff --git a/dist/images/creatures/Tormented demon#Standard.png b/dist/images/creatures/Tormented demon#Standard.png new file mode 100644 index 0000000..22132c2 Binary files /dev/null and b/dist/images/creatures/Tormented demon#Standard.png differ diff --git a/dist/images/creatures/Tormented demon#While Guthix Sleeps.png b/dist/images/creatures/Tormented demon#While Guthix Sleeps.png new file mode 100644 index 0000000..5ceb9cb Binary files /dev/null and b/dist/images/creatures/Tormented demon#While Guthix Sleeps.png differ diff --git a/dist/images/creatures/Tormented soul (Uncharted Isles)#Default.png b/dist/images/creatures/Tormented soul (Uncharted Isles)#Default.png new file mode 100644 index 0000000..d9ec8ed Binary files /dev/null and b/dist/images/creatures/Tormented soul (Uncharted Isles)#Default.png differ diff --git a/dist/images/creatures/Tormented wraith#Default.png b/dist/images/creatures/Tormented wraith#Default.png new file mode 100644 index 0000000..39683a0 Binary files /dev/null and b/dist/images/creatures/Tormented wraith#Default.png differ diff --git a/dist/images/creatures/Torrential Waterfiend (summoned)#Default.png b/dist/images/creatures/Torrential Waterfiend (summoned)#Default.png new file mode 100644 index 0000000..5572628 Binary files /dev/null and b/dist/images/creatures/Torrential Waterfiend (summoned)#Default.png differ diff --git a/dist/images/creatures/Torrential Waterfiend#Default.png b/dist/images/creatures/Torrential Waterfiend#Default.png new file mode 100644 index 0000000..9fff216 Binary files /dev/null and b/dist/images/creatures/Torrential Waterfiend#Default.png differ diff --git a/dist/images/creatures/Tortured soul (Port Phasmatys)#Default.png b/dist/images/creatures/Tortured soul (Port Phasmatys)#Default.png new file mode 100644 index 0000000..874f46c Binary files /dev/null and b/dist/images/creatures/Tortured soul (Port Phasmatys)#Default.png differ diff --git a/dist/images/creatures/Training dummy#Abyssal demon (magic).png b/dist/images/creatures/Training dummy#Abyssal demon (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Abyssal demon (magic).png differ diff --git a/dist/images/creatures/Training dummy#Abyssal demon (melee).png b/dist/images/creatures/Training dummy#Abyssal demon (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Abyssal demon (melee).png differ diff --git a/dist/images/creatures/Training dummy#Abyssal demon (ranged).png b/dist/images/creatures/Training dummy#Abyssal demon (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Abyssal demon (ranged).png differ diff --git a/dist/images/creatures/Training dummy#Basilisk (magic).png b/dist/images/creatures/Training dummy#Basilisk (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Basilisk (magic).png differ diff --git a/dist/images/creatures/Training dummy#Basilisk (melee).png b/dist/images/creatures/Training dummy#Basilisk (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Basilisk (melee).png differ diff --git a/dist/images/creatures/Training dummy#Basilisk (ranged).png b/dist/images/creatures/Training dummy#Basilisk (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Basilisk (ranged).png differ diff --git a/dist/images/creatures/Training dummy#Demon (magic).png b/dist/images/creatures/Training dummy#Demon (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Demon (magic).png differ diff --git a/dist/images/creatures/Training dummy#Demon (melee).png b/dist/images/creatures/Training dummy#Demon (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Demon (melee).png differ diff --git a/dist/images/creatures/Training dummy#Demon (ranged).png b/dist/images/creatures/Training dummy#Demon (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Demon (ranged).png differ diff --git a/dist/images/creatures/Training dummy#Dragon (magic).png b/dist/images/creatures/Training dummy#Dragon (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Dragon (magic).png differ diff --git a/dist/images/creatures/Training dummy#Dragon (melee).png b/dist/images/creatures/Training dummy#Dragon (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Dragon (melee).png differ diff --git a/dist/images/creatures/Training dummy#Dragon (ranged).png b/dist/images/creatures/Training dummy#Dragon (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Dragon (ranged).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to arrows, medium).png b/dist/images/creatures/Training dummy#Magic (weak to arrows, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to arrows, medium).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to arrows, strong).png b/dist/images/creatures/Training dummy#Magic (weak to arrows, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to arrows, strong).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to arrows, weak).png b/dist/images/creatures/Training dummy#Magic (weak to arrows, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to arrows, weak).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to bolts, medium).png b/dist/images/creatures/Training dummy#Magic (weak to bolts, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to bolts, medium).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to bolts, strong).png b/dist/images/creatures/Training dummy#Magic (weak to bolts, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to bolts, strong).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to bolts, weak).png b/dist/images/creatures/Training dummy#Magic (weak to bolts, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to bolts, weak).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to nothing, medium).png b/dist/images/creatures/Training dummy#Magic (weak to nothing, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to nothing, medium).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to nothing, strong).png b/dist/images/creatures/Training dummy#Magic (weak to nothing, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to nothing, strong).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to nothing, weak).png b/dist/images/creatures/Training dummy#Magic (weak to nothing, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to nothing, weak).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to thrown, medium).png b/dist/images/creatures/Training dummy#Magic (weak to thrown, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to thrown, medium).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to thrown, strong).png b/dist/images/creatures/Training dummy#Magic (weak to thrown, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to thrown, strong).png differ diff --git a/dist/images/creatures/Training dummy#Magic (weak to thrown, weak).png b/dist/images/creatures/Training dummy#Magic (weak to thrown, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Magic (weak to thrown, weak).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to air, medium).png b/dist/images/creatures/Training dummy#Melee (weak to air, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to air, medium).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to air, strong).png b/dist/images/creatures/Training dummy#Melee (weak to air, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to air, strong).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to air, weak).png b/dist/images/creatures/Training dummy#Melee (weak to air, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to air, weak).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to earth, medium).png b/dist/images/creatures/Training dummy#Melee (weak to earth, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to earth, medium).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to earth, strong).png b/dist/images/creatures/Training dummy#Melee (weak to earth, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to earth, strong).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to earth, weak).png b/dist/images/creatures/Training dummy#Melee (weak to earth, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to earth, weak).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to fire, medium).png b/dist/images/creatures/Training dummy#Melee (weak to fire, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to fire, medium).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to fire, strong).png b/dist/images/creatures/Training dummy#Melee (weak to fire, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to fire, strong).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to fire, weak).png b/dist/images/creatures/Training dummy#Melee (weak to fire, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to fire, weak).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to nothing, medium).png b/dist/images/creatures/Training dummy#Melee (weak to nothing, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to nothing, medium).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to nothing, strong).png b/dist/images/creatures/Training dummy#Melee (weak to nothing, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to nothing, strong).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to nothing, weak).png b/dist/images/creatures/Training dummy#Melee (weak to nothing, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to nothing, weak).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to water, medium).png b/dist/images/creatures/Training dummy#Melee (weak to water, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to water, medium).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to water, strong).png b/dist/images/creatures/Training dummy#Melee (weak to water, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to water, strong).png differ diff --git a/dist/images/creatures/Training dummy#Melee (weak to water, weak).png b/dist/images/creatures/Training dummy#Melee (weak to water, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Melee (weak to water, weak).png differ diff --git a/dist/images/creatures/Training dummy#Permanent.png b/dist/images/creatures/Training dummy#Permanent.png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Permanent.png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to crush, medium).png b/dist/images/creatures/Training dummy#Ranged (weak to crush, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to crush, medium).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to crush, strong).png b/dist/images/creatures/Training dummy#Ranged (weak to crush, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to crush, strong).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to crush, weak).png b/dist/images/creatures/Training dummy#Ranged (weak to crush, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to crush, weak).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to nothing, medium).png b/dist/images/creatures/Training dummy#Ranged (weak to nothing, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to nothing, medium).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to nothing, strong).png b/dist/images/creatures/Training dummy#Ranged (weak to nothing, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to nothing, strong).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to nothing, weak).png b/dist/images/creatures/Training dummy#Ranged (weak to nothing, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to nothing, weak).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to slash, medium).png b/dist/images/creatures/Training dummy#Ranged (weak to slash, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to slash, medium).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to slash, strong).png b/dist/images/creatures/Training dummy#Ranged (weak to slash, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to slash, strong).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to slash, weak).png b/dist/images/creatures/Training dummy#Ranged (weak to slash, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to slash, weak).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to stab, medium).png b/dist/images/creatures/Training dummy#Ranged (weak to stab, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to stab, medium).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to stab, strong).png b/dist/images/creatures/Training dummy#Ranged (weak to stab, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to stab, strong).png differ diff --git a/dist/images/creatures/Training dummy#Ranged (weak to stab, weak).png b/dist/images/creatures/Training dummy#Ranged (weak to stab, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Ranged (weak to stab, weak).png differ diff --git a/dist/images/creatures/Training dummy#Revenant (magic).png b/dist/images/creatures/Training dummy#Revenant (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Revenant (magic).png differ diff --git a/dist/images/creatures/Training dummy#Revenant (melee).png b/dist/images/creatures/Training dummy#Revenant (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Revenant (melee).png differ diff --git a/dist/images/creatures/Training dummy#Revenant (ranged).png b/dist/images/creatures/Training dummy#Revenant (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Revenant (ranged).png differ diff --git a/dist/images/creatures/Training dummy#Undead (magic).png b/dist/images/creatures/Training dummy#Undead (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Undead (magic).png differ diff --git a/dist/images/creatures/Training dummy#Undead (melee).png b/dist/images/creatures/Training dummy#Undead (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Undead (melee).png differ diff --git a/dist/images/creatures/Training dummy#Undead (ranged).png b/dist/images/creatures/Training dummy#Undead (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Undead (ranged).png differ diff --git a/dist/images/creatures/Training dummy#Wallasalki (magic).png b/dist/images/creatures/Training dummy#Wallasalki (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Wallasalki (magic).png differ diff --git a/dist/images/creatures/Training dummy#Wallasalki (melee).png b/dist/images/creatures/Training dummy#Wallasalki (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Wallasalki (melee).png differ diff --git a/dist/images/creatures/Training dummy#Wallasalki (ranged).png b/dist/images/creatures/Training dummy#Wallasalki (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/dist/images/creatures/Training dummy#Wallasalki (ranged).png differ diff --git a/dist/images/creatures/Troll brute (Davendale)#Default.png b/dist/images/creatures/Troll brute (Davendale)#Default.png new file mode 100644 index 0000000..c56d15b Binary files /dev/null and b/dist/images/creatures/Troll brute (Davendale)#Default.png differ diff --git a/dist/images/creatures/Troll brute#Default.png b/dist/images/creatures/Troll brute#Default.png new file mode 100644 index 0000000..c1db093 Binary files /dev/null and b/dist/images/creatures/Troll brute#Default.png differ diff --git a/dist/images/creatures/Troll chucker (Davendale)#Default.png b/dist/images/creatures/Troll chucker (Davendale)#Default.png new file mode 100644 index 0000000..6494e83 Binary files /dev/null and b/dist/images/creatures/Troll chucker (Davendale)#Default.png differ diff --git a/dist/images/creatures/Troll chucker#Default.png b/dist/images/creatures/Troll chucker#Default.png new file mode 100644 index 0000000..c77c549 Binary files /dev/null and b/dist/images/creatures/Troll chucker#Default.png differ diff --git a/dist/images/creatures/Troll general#Club.png b/dist/images/creatures/Troll general#Club.png new file mode 100644 index 0000000..1f8e885 Binary files /dev/null and b/dist/images/creatures/Troll general#Club.png differ diff --git a/dist/images/creatures/Troll general#Hammer.png b/dist/images/creatures/Troll general#Hammer.png new file mode 100644 index 0000000..89049ef Binary files /dev/null and b/dist/images/creatures/Troll general#Hammer.png differ diff --git a/dist/images/creatures/Troll general#Sword.png b/dist/images/creatures/Troll general#Sword.png new file mode 100644 index 0000000..404606e Binary files /dev/null and b/dist/images/creatures/Troll general#Sword.png differ diff --git a/dist/images/creatures/Troll lout#Default.png b/dist/images/creatures/Troll lout#Default.png new file mode 100644 index 0000000..872f7b0 Binary files /dev/null and b/dist/images/creatures/Troll lout#Default.png differ diff --git a/dist/images/creatures/Troll shaman (Davendale)#Default.png b/dist/images/creatures/Troll shaman (Davendale)#Default.png new file mode 100644 index 0000000..f0f2997 Binary files /dev/null and b/dist/images/creatures/Troll shaman (Davendale)#Default.png differ diff --git a/dist/images/creatures/Troll shaman#Default.png b/dist/images/creatures/Troll shaman#Default.png new file mode 100644 index 0000000..146a547 Binary files /dev/null and b/dist/images/creatures/Troll shaman#Default.png differ diff --git a/dist/images/creatures/Troll spectator#Default.png b/dist/images/creatures/Troll spectator#Default.png new file mode 100644 index 0000000..d8653fa Binary files /dev/null and b/dist/images/creatures/Troll spectator#Default.png differ diff --git a/dist/images/creatures/Truthful shadow#Default.png b/dist/images/creatures/Truthful shadow#Default.png new file mode 100644 index 0000000..540258b Binary files /dev/null and b/dist/images/creatures/Truthful shadow#Default.png differ diff --git a/dist/images/creatures/Tstanon Karlak#Default.png b/dist/images/creatures/Tstanon Karlak#Default.png new file mode 100644 index 0000000..06fb4eb Binary files /dev/null and b/dist/images/creatures/Tstanon Karlak#Default.png differ diff --git a/dist/images/creatures/Turoth#60 - Large.png b/dist/images/creatures/Turoth#60 - Large.png new file mode 100644 index 0000000..185e9cd Binary files /dev/null and b/dist/images/creatures/Turoth#60 - Large.png differ diff --git a/dist/images/creatures/Turoth#60 - Small.png b/dist/images/creatures/Turoth#60 - Small.png new file mode 100644 index 0000000..f41178e Binary files /dev/null and b/dist/images/creatures/Turoth#60 - Small.png differ diff --git a/dist/images/creatures/Turoth#68 - Female.png b/dist/images/creatures/Turoth#68 - Female.png new file mode 100644 index 0000000..2f2edf4 Binary files /dev/null and b/dist/images/creatures/Turoth#68 - Female.png differ diff --git a/dist/images/creatures/Turoth#68 - Male.png b/dist/images/creatures/Turoth#68 - Male.png new file mode 100644 index 0000000..5906714 Binary files /dev/null and b/dist/images/creatures/Turoth#68 - Male.png differ diff --git a/dist/images/creatures/TzHaar-Hur#Level 86.png b/dist/images/creatures/TzHaar-Hur#Level 86.png new file mode 100644 index 0000000..b4964d4 Binary files /dev/null and b/dist/images/creatures/TzHaar-Hur#Level 86.png differ diff --git a/dist/images/creatures/TzHaar-Hur#Level 98.png b/dist/images/creatures/TzHaar-Hur#Level 98.png new file mode 100644 index 0000000..b4964d4 Binary files /dev/null and b/dist/images/creatures/TzHaar-Hur#Level 98.png differ diff --git a/dist/images/creatures/TzHaar-Ket#Default.png b/dist/images/creatures/TzHaar-Ket#Default.png new file mode 100644 index 0000000..521ff05 Binary files /dev/null and b/dist/images/creatures/TzHaar-Ket#Default.png differ diff --git a/dist/images/creatures/TzHaar-Mej#Default.png b/dist/images/creatures/TzHaar-Mej#Default.png new file mode 100644 index 0000000..dc55057 Binary files /dev/null and b/dist/images/creatures/TzHaar-Mej#Default.png differ diff --git a/dist/images/creatures/TzHaar-Xil#Melee.png b/dist/images/creatures/TzHaar-Xil#Melee.png new file mode 100644 index 0000000..811c95e Binary files /dev/null and b/dist/images/creatures/TzHaar-Xil#Melee.png differ diff --git a/dist/images/creatures/TzHaar-Xil#Ranged.png b/dist/images/creatures/TzHaar-Xil#Ranged.png new file mode 100644 index 0000000..811c95e Binary files /dev/null and b/dist/images/creatures/TzHaar-Xil#Ranged.png differ diff --git a/dist/images/creatures/TzKal-Zuk#Hard Mode.png b/dist/images/creatures/TzKal-Zuk#Hard Mode.png new file mode 100644 index 0000000..68c5bb6 Binary files /dev/null and b/dist/images/creatures/TzKal-Zuk#Hard Mode.png differ diff --git a/dist/images/creatures/TzKal-Zuk#Normal Mode.png b/dist/images/creatures/TzKal-Zuk#Normal Mode.png new file mode 100644 index 0000000..68c5bb6 Binary files /dev/null and b/dist/images/creatures/TzKal-Zuk#Normal Mode.png differ diff --git a/dist/images/creatures/TzTok-Jad#Default.png b/dist/images/creatures/TzTok-Jad#Default.png new file mode 100644 index 0000000..ede3ebc Binary files /dev/null and b/dist/images/creatures/TzTok-Jad#Default.png differ diff --git a/dist/images/creatures/Ulthven Keith#Default.png b/dist/images/creatures/Ulthven Keith#Default.png new file mode 100644 index 0000000..28bf698 Binary files /dev/null and b/dist/images/creatures/Ulthven Keith#Default.png differ diff --git a/dist/images/creatures/Undead Witch#Normal mode.png b/dist/images/creatures/Undead Witch#Normal mode.png new file mode 100644 index 0000000..965a080 Binary files /dev/null and b/dist/images/creatures/Undead Witch#Normal mode.png differ diff --git a/dist/images/creatures/Undead Witch#Story mode.png b/dist/images/creatures/Undead Witch#Story mode.png new file mode 100644 index 0000000..965a080 Binary files /dev/null and b/dist/images/creatures/Undead Witch#Story mode.png differ diff --git a/dist/images/creatures/Undead chicken#Default.png b/dist/images/creatures/Undead chicken#Default.png new file mode 100644 index 0000000..6206ba4 Binary files /dev/null and b/dist/images/creatures/Undead chicken#Default.png differ diff --git a/dist/images/creatures/Undead cow#Default.png b/dist/images/creatures/Undead cow#Default.png new file mode 100644 index 0000000..2bac17f Binary files /dev/null and b/dist/images/creatures/Undead cow#Default.png differ diff --git a/dist/images/creatures/Undead giant (Battle of Forinthry)#Normal mode.png b/dist/images/creatures/Undead giant (Battle of Forinthry)#Normal mode.png new file mode 100644 index 0000000..7c5b695 Binary files /dev/null and b/dist/images/creatures/Undead giant (Battle of Forinthry)#Normal mode.png differ diff --git a/dist/images/creatures/Undead giant (Battle of Forinthry)#Story mode.png b/dist/images/creatures/Undead giant (Battle of Forinthry)#Story mode.png new file mode 100644 index 0000000..7c5b695 Binary files /dev/null and b/dist/images/creatures/Undead giant (Battle of Forinthry)#Story mode.png differ diff --git a/dist/images/creatures/Undead one#Skeleton (level 44).png b/dist/images/creatures/Undead one#Skeleton (level 44).png new file mode 100644 index 0000000..be4c475 Binary files /dev/null and b/dist/images/creatures/Undead one#Skeleton (level 44).png differ diff --git a/dist/images/creatures/Undead one#Skeleton (level 46).png b/dist/images/creatures/Undead one#Skeleton (level 46).png new file mode 100644 index 0000000..aec16bb Binary files /dev/null and b/dist/images/creatures/Undead one#Skeleton (level 46).png differ diff --git a/dist/images/creatures/Undead one#Zombie (level 44).png b/dist/images/creatures/Undead one#Zombie (level 44).png new file mode 100644 index 0000000..c069f12 Binary files /dev/null and b/dist/images/creatures/Undead one#Zombie (level 44).png differ diff --git a/dist/images/creatures/Undead one#Zombie (level 46).png b/dist/images/creatures/Undead one#Zombie (level 46).png new file mode 100644 index 0000000..e2dcb53 Binary files /dev/null and b/dist/images/creatures/Undead one#Zombie (level 46).png differ diff --git a/dist/images/creatures/Undead pekin#Default.png b/dist/images/creatures/Undead pekin#Default.png new file mode 100644 index 0000000..fb05660 Binary files /dev/null and b/dist/images/creatures/Undead pekin#Default.png differ diff --git a/dist/images/creatures/Undead troll#Level 77.png b/dist/images/creatures/Undead troll#Level 77.png new file mode 100644 index 0000000..ba3f5ce Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 77.png differ diff --git a/dist/images/creatures/Undead troll#Level 81 (1).png b/dist/images/creatures/Undead troll#Level 81 (1).png new file mode 100644 index 0000000..dd7c40d Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 81 (1).png differ diff --git a/dist/images/creatures/Undead troll#Level 81 (2).png b/dist/images/creatures/Undead troll#Level 81 (2).png new file mode 100644 index 0000000..bdc882f Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 81 (2).png differ diff --git a/dist/images/creatures/Undead troll#Level 81 (3).png b/dist/images/creatures/Undead troll#Level 81 (3).png new file mode 100644 index 0000000..ffbed19 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 81 (3).png differ diff --git a/dist/images/creatures/Undead troll#Level 81 (4).png b/dist/images/creatures/Undead troll#Level 81 (4).png new file mode 100644 index 0000000..6fe5b29 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 81 (4).png differ diff --git a/dist/images/creatures/Undead troll#Level 81 (5).png b/dist/images/creatures/Undead troll#Level 81 (5).png new file mode 100644 index 0000000..66898c6 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 81 (5).png differ diff --git a/dist/images/creatures/Undead troll#Level 86 (1).png b/dist/images/creatures/Undead troll#Level 86 (1).png new file mode 100644 index 0000000..166391f Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 86 (1).png differ diff --git a/dist/images/creatures/Undead troll#Level 86 (2).png b/dist/images/creatures/Undead troll#Level 86 (2).png new file mode 100644 index 0000000..db3a8f8 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 86 (2).png differ diff --git a/dist/images/creatures/Undead troll#Level 86 (3).png b/dist/images/creatures/Undead troll#Level 86 (3).png new file mode 100644 index 0000000..3570b27 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 86 (3).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (1).png b/dist/images/creatures/Undead troll#Level 95 (1).png new file mode 100644 index 0000000..af8e88b Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (1).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (2).png b/dist/images/creatures/Undead troll#Level 95 (2).png new file mode 100644 index 0000000..11f1b8c Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (2).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (3).png b/dist/images/creatures/Undead troll#Level 95 (3).png new file mode 100644 index 0000000..a3d7ea5 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (3).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (4).png b/dist/images/creatures/Undead troll#Level 95 (4).png new file mode 100644 index 0000000..f817cd9 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (4).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (5).png b/dist/images/creatures/Undead troll#Level 95 (5).png new file mode 100644 index 0000000..7fc99c2 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (5).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (6).png b/dist/images/creatures/Undead troll#Level 95 (6).png new file mode 100644 index 0000000..45c9caf Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (6).png differ diff --git a/dist/images/creatures/Undead troll#Level 95 (7).png b/dist/images/creatures/Undead troll#Level 95 (7).png new file mode 100644 index 0000000..c322ae1 Binary files /dev/null and b/dist/images/creatures/Undead troll#Level 95 (7).png differ diff --git a/dist/images/creatures/Unspeakable horror (elite)#Default.png b/dist/images/creatures/Unspeakable horror (elite)#Default.png new file mode 100644 index 0000000..a8da496 Binary files /dev/null and b/dist/images/creatures/Unspeakable horror (elite)#Default.png differ diff --git a/dist/images/creatures/Unspeakable horror#Default.png b/dist/images/creatures/Unspeakable horror#Default.png new file mode 100644 index 0000000..a8da496 Binary files /dev/null and b/dist/images/creatures/Unspeakable horror#Default.png differ diff --git a/dist/images/creatures/Unstable glacyte#Default.png b/dist/images/creatures/Unstable glacyte#Default.png new file mode 100644 index 0000000..5017253 Binary files /dev/null and b/dist/images/creatures/Unstable glacyte#Default.png differ diff --git a/dist/images/creatures/Unstable zombie#Ancient Awakening.png b/dist/images/creatures/Unstable zombie#Ancient Awakening.png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/dist/images/creatures/Unstable zombie#Ancient Awakening.png differ diff --git a/dist/images/creatures/Unstable zombie#Ungael combat activity (hard).png b/dist/images/creatures/Unstable zombie#Ungael combat activity (hard).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/dist/images/creatures/Unstable zombie#Ungael combat activity (hard).png differ diff --git a/dist/images/creatures/Unstable zombie#Ungael combat activity (standard).png b/dist/images/creatures/Unstable zombie#Ungael combat activity (standard).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/dist/images/creatures/Unstable zombie#Ungael combat activity (standard).png differ diff --git a/dist/images/creatures/Vampyre Juvenile#Burgh de Rott.png b/dist/images/creatures/Vampyre Juvenile#Burgh de Rott.png new file mode 100644 index 0000000..3689dd7 Binary files /dev/null and b/dist/images/creatures/Vampyre Juvenile#Burgh de Rott.png differ diff --git a/dist/images/creatures/Vampyre Juvenile#Meiyerditch.png b/dist/images/creatures/Vampyre Juvenile#Meiyerditch.png new file mode 100644 index 0000000..4bf51af Binary files /dev/null and b/dist/images/creatures/Vampyre Juvenile#Meiyerditch.png differ diff --git a/dist/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 58).png b/dist/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 58).png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/dist/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 58).png differ diff --git a/dist/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 63).png b/dist/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 63).png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/dist/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 63).png differ diff --git a/dist/images/creatures/Vampyre Juvinate#Darkmeyer.png b/dist/images/creatures/Vampyre Juvinate#Darkmeyer.png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/dist/images/creatures/Vampyre Juvinate#Darkmeyer.png differ diff --git a/dist/images/creatures/Vampyre Juvinate#Meiyerditch.png b/dist/images/creatures/Vampyre Juvinate#Meiyerditch.png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/dist/images/creatures/Vampyre Juvinate#Meiyerditch.png differ diff --git a/dist/images/creatures/Vampyre#Default.png b/dist/images/creatures/Vampyre#Default.png new file mode 100644 index 0000000..bd19b83 Binary files /dev/null and b/dist/images/creatures/Vampyre#Default.png differ diff --git a/dist/images/creatures/Veil-ripper Ozharakha#Default.png b/dist/images/creatures/Veil-ripper Ozharakha#Default.png new file mode 100644 index 0000000..f16467e Binary files /dev/null and b/dist/images/creatures/Veil-ripper Ozharakha#Default.png differ diff --git a/dist/images/creatures/Venomous dinosaur#Dinosaur invasion.png b/dist/images/creatures/Venomous dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..52a569e Binary files /dev/null and b/dist/images/creatures/Venomous dinosaur#Dinosaur invasion.png differ diff --git a/dist/images/creatures/Venomous dinosaur#Normal.png b/dist/images/creatures/Venomous dinosaur#Normal.png new file mode 100644 index 0000000..52a569e Binary files /dev/null and b/dist/images/creatures/Venomous dinosaur#Normal.png differ diff --git a/dist/images/creatures/Verac the Defiled#Normal.png b/dist/images/creatures/Verac the Defiled#Normal.png new file mode 100644 index 0000000..d6147eb Binary files /dev/null and b/dist/images/creatures/Verac the Defiled#Normal.png differ diff --git a/dist/images/creatures/Verac the Defiled#Rise of the Six.png b/dist/images/creatures/Verac the Defiled#Rise of the Six.png new file mode 100644 index 0000000..3cce753 Binary files /dev/null and b/dist/images/creatures/Verac the Defiled#Rise of the Six.png differ diff --git a/dist/images/creatures/Verak Lith#Default.png b/dist/images/creatures/Verak Lith#Default.png new file mode 100644 index 0000000..4c6b337 Binary files /dev/null and b/dist/images/creatures/Verak Lith#Default.png differ diff --git a/dist/images/creatures/Verak Little#Default.png b/dist/images/creatures/Verak Little#Default.png new file mode 100644 index 0000000..6f68132 Binary files /dev/null and b/dist/images/creatures/Verak Little#Default.png differ diff --git a/dist/images/creatures/Vindicta#Hard mode.png b/dist/images/creatures/Vindicta#Hard mode.png new file mode 100644 index 0000000..e669391 Binary files /dev/null and b/dist/images/creatures/Vindicta#Hard mode.png differ diff --git a/dist/images/creatures/Vindicta#Normal mode.png b/dist/images/creatures/Vindicta#Normal mode.png new file mode 100644 index 0000000..e669391 Binary files /dev/null and b/dist/images/creatures/Vindicta#Normal mode.png differ diff --git a/dist/images/creatures/Vinecrawler#Default.png b/dist/images/creatures/Vinecrawler#Default.png new file mode 100644 index 0000000..bf7f3e8 Binary files /dev/null and b/dist/images/creatures/Vinecrawler#Default.png differ diff --git a/dist/images/creatures/Vorago#Default.png b/dist/images/creatures/Vorago#Default.png new file mode 100644 index 0000000..8eafb50 Binary files /dev/null and b/dist/images/creatures/Vorago#Default.png differ diff --git a/dist/images/creatures/Vorkath#Hard mode.png b/dist/images/creatures/Vorkath#Hard mode.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/dist/images/creatures/Vorkath#Hard mode.png differ diff --git a/dist/images/creatures/Vorkath#Normal mode.png b/dist/images/creatures/Vorkath#Normal mode.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/dist/images/creatures/Vorkath#Normal mode.png differ diff --git a/dist/images/creatures/Vorkath#Requiem for a Dragon.png b/dist/images/creatures/Vorkath#Requiem for a Dragon.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/dist/images/creatures/Vorkath#Requiem for a Dragon.png differ diff --git a/dist/images/creatures/Vorkath#Story mode.png b/dist/images/creatures/Vorkath#Story mode.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/dist/images/creatures/Vorkath#Story mode.png differ diff --git a/dist/images/creatures/Vyrelady#1.png b/dist/images/creatures/Vyrelady#1.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/dist/images/creatures/Vyrelady#1.png differ diff --git a/dist/images/creatures/Vyrelady#2.png b/dist/images/creatures/Vyrelady#2.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/dist/images/creatures/Vyrelady#2.png differ diff --git a/dist/images/creatures/Vyrelady#3.png b/dist/images/creatures/Vyrelady#3.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/dist/images/creatures/Vyrelady#3.png differ diff --git a/dist/images/creatures/Vyrelady#4.png b/dist/images/creatures/Vyrelady#4.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/dist/images/creatures/Vyrelady#4.png differ diff --git a/dist/images/creatures/Vyrelady#5.png b/dist/images/creatures/Vyrelady#5.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/dist/images/creatures/Vyrelady#5.png differ diff --git a/dist/images/creatures/Vyrelady#6.png b/dist/images/creatures/Vyrelady#6.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/dist/images/creatures/Vyrelady#6.png differ diff --git a/dist/images/creatures/Vyrelord#1.png b/dist/images/creatures/Vyrelord#1.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/dist/images/creatures/Vyrelord#1.png differ diff --git a/dist/images/creatures/Vyrelord#2.png b/dist/images/creatures/Vyrelord#2.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/dist/images/creatures/Vyrelord#2.png differ diff --git a/dist/images/creatures/Vyrelord#3.png b/dist/images/creatures/Vyrelord#3.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/dist/images/creatures/Vyrelord#3.png differ diff --git a/dist/images/creatures/Vyrelord#4.png b/dist/images/creatures/Vyrelord#4.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/dist/images/creatures/Vyrelord#4.png differ diff --git a/dist/images/creatures/Vyrelord#5.png b/dist/images/creatures/Vyrelord#5.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/dist/images/creatures/Vyrelord#5.png differ diff --git a/dist/images/creatures/Vyrelord#6.png b/dist/images/creatures/Vyrelord#6.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/dist/images/creatures/Vyrelord#6.png differ diff --git a/dist/images/creatures/Vyrewatch#Level 70 (East of Burgh de Rott).png b/dist/images/creatures/Vyrewatch#Level 70 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 70 (East of Burgh de Rott).png differ diff --git a/dist/images/creatures/Vyrewatch#Level 70.png b/dist/images/creatures/Vyrewatch#Level 70.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 70.png differ diff --git a/dist/images/creatures/Vyrewatch#Level 72 (East of Burgh de Rott).png b/dist/images/creatures/Vyrewatch#Level 72 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 72 (East of Burgh de Rott).png differ diff --git a/dist/images/creatures/Vyrewatch#Level 72.png b/dist/images/creatures/Vyrewatch#Level 72.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 72.png differ diff --git a/dist/images/creatures/Vyrewatch#Level 75 (East of Burgh de Rott).png b/dist/images/creatures/Vyrewatch#Level 75 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 75 (East of Burgh de Rott).png differ diff --git a/dist/images/creatures/Vyrewatch#Level 75.png b/dist/images/creatures/Vyrewatch#Level 75.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 75.png differ diff --git a/dist/images/creatures/Vyrewatch#Level 78 (East of Burgh de Rott).png b/dist/images/creatures/Vyrewatch#Level 78 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 78 (East of Burgh de Rott).png differ diff --git a/dist/images/creatures/Vyrewatch#Level 78.png b/dist/images/creatures/Vyrewatch#Level 78.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 78.png differ diff --git a/dist/images/creatures/Vyrewatch#Level 86.png b/dist/images/creatures/Vyrewatch#Level 86.png new file mode 100644 index 0000000..56b5c12 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 86.png differ diff --git a/dist/images/creatures/Vyrewatch#Level 91.png b/dist/images/creatures/Vyrewatch#Level 91.png new file mode 100644 index 0000000..56b5c12 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Level 91.png differ diff --git a/dist/images/creatures/Vyrewatch#Temple Trekking (Easy Route).png b/dist/images/creatures/Vyrewatch#Temple Trekking (Easy Route).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Temple Trekking (Easy Route).png differ diff --git a/dist/images/creatures/Vyrewatch#Temple Trekking (Hard Route).png b/dist/images/creatures/Vyrewatch#Temple Trekking (Hard Route).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Temple Trekking (Hard Route).png differ diff --git a/dist/images/creatures/Vyrewatch#Temple Trekking (Medium Route).png b/dist/images/creatures/Vyrewatch#Temple Trekking (Medium Route).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/dist/images/creatures/Vyrewatch#Temple Trekking (Medium Route).png differ diff --git a/dist/images/creatures/Wall beast#Default.png b/dist/images/creatures/Wall beast#Default.png new file mode 100644 index 0000000..deae076 Binary files /dev/null and b/dist/images/creatures/Wall beast#Default.png differ diff --git a/dist/images/creatures/Warped bat#Default.png b/dist/images/creatures/Warped bat#Default.png new file mode 100644 index 0000000..b955679 Binary files /dev/null and b/dist/images/creatures/Warped bat#Default.png differ diff --git a/dist/images/creatures/Warped cockroach#Default.png b/dist/images/creatures/Warped cockroach#Default.png new file mode 100644 index 0000000..4c39d5d Binary files /dev/null and b/dist/images/creatures/Warped cockroach#Default.png differ diff --git a/dist/images/creatures/Warped rat#Default.png b/dist/images/creatures/Warped rat#Default.png new file mode 100644 index 0000000..f88c8eb Binary files /dev/null and b/dist/images/creatures/Warped rat#Default.png differ diff --git a/dist/images/creatures/Warped skeleton#Normal mode.png b/dist/images/creatures/Warped skeleton#Normal mode.png new file mode 100644 index 0000000..ef2e08b Binary files /dev/null and b/dist/images/creatures/Warped skeleton#Normal mode.png differ diff --git a/dist/images/creatures/Warped skeleton#Story mode.png b/dist/images/creatures/Warped skeleton#Story mode.png new file mode 100644 index 0000000..823314f Binary files /dev/null and b/dist/images/creatures/Warped skeleton#Story mode.png differ diff --git a/dist/images/creatures/Warped terrorbird#1 (chimed).png b/dist/images/creatures/Warped terrorbird#1 (chimed).png new file mode 100644 index 0000000..fd3ea33 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#1 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#1.png b/dist/images/creatures/Warped terrorbird#1.png new file mode 100644 index 0000000..c16cf3a Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#1.png differ diff --git a/dist/images/creatures/Warped terrorbird#10 (chimed).png b/dist/images/creatures/Warped terrorbird#10 (chimed).png new file mode 100644 index 0000000..8c385eb Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#10 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#10.png b/dist/images/creatures/Warped terrorbird#10.png new file mode 100644 index 0000000..b8421b1 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#10.png differ diff --git a/dist/images/creatures/Warped terrorbird#2 (chimed).png b/dist/images/creatures/Warped terrorbird#2 (chimed).png new file mode 100644 index 0000000..573ca0b Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#2 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#2.png b/dist/images/creatures/Warped terrorbird#2.png new file mode 100644 index 0000000..7ee382e Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#2.png differ diff --git a/dist/images/creatures/Warped terrorbird#3 (chimed).png b/dist/images/creatures/Warped terrorbird#3 (chimed).png new file mode 100644 index 0000000..2d9f70b Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#3 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#3.png b/dist/images/creatures/Warped terrorbird#3.png new file mode 100644 index 0000000..3728789 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#3.png differ diff --git a/dist/images/creatures/Warped terrorbird#4 (chimed).png b/dist/images/creatures/Warped terrorbird#4 (chimed).png new file mode 100644 index 0000000..19bd015 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#4 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#4.png b/dist/images/creatures/Warped terrorbird#4.png new file mode 100644 index 0000000..72c8301 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#4.png differ diff --git a/dist/images/creatures/Warped terrorbird#5 (chimed).png b/dist/images/creatures/Warped terrorbird#5 (chimed).png new file mode 100644 index 0000000..a2a2192 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#5 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#5.png b/dist/images/creatures/Warped terrorbird#5.png new file mode 100644 index 0000000..181a9f5 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#5.png differ diff --git a/dist/images/creatures/Warped terrorbird#6 (chimed).png b/dist/images/creatures/Warped terrorbird#6 (chimed).png new file mode 100644 index 0000000..9cf1294 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#6 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#6.png b/dist/images/creatures/Warped terrorbird#6.png new file mode 100644 index 0000000..8900e46 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#6.png differ diff --git a/dist/images/creatures/Warped terrorbird#7 (chimed).png b/dist/images/creatures/Warped terrorbird#7 (chimed).png new file mode 100644 index 0000000..813c887 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#7 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#7.png b/dist/images/creatures/Warped terrorbird#7.png new file mode 100644 index 0000000..3798c3c Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#7.png differ diff --git a/dist/images/creatures/Warped terrorbird#8 (chimed).png b/dist/images/creatures/Warped terrorbird#8 (chimed).png new file mode 100644 index 0000000..5433465 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#8 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#8.png b/dist/images/creatures/Warped terrorbird#8.png new file mode 100644 index 0000000..22ca145 Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#8.png differ diff --git a/dist/images/creatures/Warped terrorbird#9 (chimed).png b/dist/images/creatures/Warped terrorbird#9 (chimed).png new file mode 100644 index 0000000..4fd501e Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#9 (chimed).png differ diff --git a/dist/images/creatures/Warped terrorbird#9.png b/dist/images/creatures/Warped terrorbird#9.png new file mode 100644 index 0000000..1c58a6b Binary files /dev/null and b/dist/images/creatures/Warped terrorbird#9.png differ diff --git a/dist/images/creatures/Warped tortoise#Immune.png b/dist/images/creatures/Warped tortoise#Immune.png new file mode 100644 index 0000000..b1ca5b3 Binary files /dev/null and b/dist/images/creatures/Warped tortoise#Immune.png differ diff --git a/dist/images/creatures/Warped tortoise#Vulnerable.png b/dist/images/creatures/Warped tortoise#Vulnerable.png new file mode 100644 index 0000000..77889d5 Binary files /dev/null and b/dist/images/creatures/Warped tortoise#Vulnerable.png differ diff --git a/dist/images/creatures/Waterfiend (Ghorrock)#102.png b/dist/images/creatures/Waterfiend (Ghorrock)#102.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/dist/images/creatures/Waterfiend (Ghorrock)#102.png differ diff --git a/dist/images/creatures/Waterfiend (Ghorrock)#107.png b/dist/images/creatures/Waterfiend (Ghorrock)#107.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/dist/images/creatures/Waterfiend (Ghorrock)#107.png differ diff --git a/dist/images/creatures/Waterfiend (Temple of Aminishi)#Normal mode.png b/dist/images/creatures/Waterfiend (Temple of Aminishi)#Normal mode.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/dist/images/creatures/Waterfiend (Temple of Aminishi)#Normal mode.png differ diff --git a/dist/images/creatures/Waterfiend (Temple of Aminishi)#Story mode.png b/dist/images/creatures/Waterfiend (Temple of Aminishi)#Story mode.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/dist/images/creatures/Waterfiend (Temple of Aminishi)#Story mode.png differ diff --git a/dist/images/creatures/Waterfiend (The Zamorakian Undercity)#Default.png b/dist/images/creatures/Waterfiend (The Zamorakian Undercity)#Default.png new file mode 100644 index 0000000..9fff216 Binary files /dev/null and b/dist/images/creatures/Waterfiend (The Zamorakian Undercity)#Default.png differ diff --git a/dist/images/creatures/Waterfiend (elite)#Ancient Cavern.png b/dist/images/creatures/Waterfiend (elite)#Ancient Cavern.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/dist/images/creatures/Waterfiend (elite)#Ancient Cavern.png differ diff --git a/dist/images/creatures/Waterfiend (elite)#Ghorrock.png b/dist/images/creatures/Waterfiend (elite)#Ghorrock.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/dist/images/creatures/Waterfiend (elite)#Ghorrock.png differ diff --git a/dist/images/creatures/Waterfiend (summoned)#Default.png b/dist/images/creatures/Waterfiend (summoned)#Default.png new file mode 100644 index 0000000..4668e88 Binary files /dev/null and b/dist/images/creatures/Waterfiend (summoned)#Default.png differ diff --git a/dist/images/creatures/Waterfiend#Default.png b/dist/images/creatures/Waterfiend#Default.png new file mode 100644 index 0000000..fa7e010 Binary files /dev/null and b/dist/images/creatures/Waterfiend#Default.png differ diff --git a/dist/images/creatures/Werewolf#Alexis.png b/dist/images/creatures/Werewolf#Alexis.png new file mode 100644 index 0000000..1bfde38 Binary files /dev/null and b/dist/images/creatures/Werewolf#Alexis.png differ diff --git a/dist/images/creatures/Werewolf#Boris.png b/dist/images/creatures/Werewolf#Boris.png new file mode 100644 index 0000000..d5dcd17 Binary files /dev/null and b/dist/images/creatures/Werewolf#Boris.png differ diff --git a/dist/images/creatures/Werewolf#Eduard.png b/dist/images/creatures/Werewolf#Eduard.png new file mode 100644 index 0000000..80239c9 Binary files /dev/null and b/dist/images/creatures/Werewolf#Eduard.png differ diff --git a/dist/images/creatures/Werewolf#Galina.png b/dist/images/creatures/Werewolf#Galina.png new file mode 100644 index 0000000..0ee5f6f Binary files /dev/null and b/dist/images/creatures/Werewolf#Galina.png differ diff --git a/dist/images/creatures/Werewolf#Georgy.png b/dist/images/creatures/Werewolf#Georgy.png new file mode 100644 index 0000000..2567652 Binary files /dev/null and b/dist/images/creatures/Werewolf#Georgy.png differ diff --git a/dist/images/creatures/Werewolf#God Wars Dungeon (female).png b/dist/images/creatures/Werewolf#God Wars Dungeon (female).png new file mode 100644 index 0000000..779de01 Binary files /dev/null and b/dist/images/creatures/Werewolf#God Wars Dungeon (female).png differ diff --git a/dist/images/creatures/Werewolf#God Wars Dungeon (male).png b/dist/images/creatures/Werewolf#God Wars Dungeon (male).png new file mode 100644 index 0000000..3e35028 Binary files /dev/null and b/dist/images/creatures/Werewolf#God Wars Dungeon (male).png differ diff --git a/dist/images/creatures/Werewolf#Imre.png b/dist/images/creatures/Werewolf#Imre.png new file mode 100644 index 0000000..4884c5a Binary files /dev/null and b/dist/images/creatures/Werewolf#Imre.png differ diff --git a/dist/images/creatures/Werewolf#Irina.png b/dist/images/creatures/Werewolf#Irina.png new file mode 100644 index 0000000..1a6cd97 Binary files /dev/null and b/dist/images/creatures/Werewolf#Irina.png differ diff --git a/dist/images/creatures/Werewolf#Joseph.png b/dist/images/creatures/Werewolf#Joseph.png new file mode 100644 index 0000000..793da70 Binary files /dev/null and b/dist/images/creatures/Werewolf#Joseph.png differ diff --git a/dist/images/creatures/Werewolf#Ksenia.png b/dist/images/creatures/Werewolf#Ksenia.png new file mode 100644 index 0000000..8373eaf Binary files /dev/null and b/dist/images/creatures/Werewolf#Ksenia.png differ diff --git a/dist/images/creatures/Werewolf#Lev.png b/dist/images/creatures/Werewolf#Lev.png new file mode 100644 index 0000000..1df6607 Binary files /dev/null and b/dist/images/creatures/Werewolf#Lev.png differ diff --git a/dist/images/creatures/Werewolf#Liliya.png b/dist/images/creatures/Werewolf#Liliya.png new file mode 100644 index 0000000..8fc68bf Binary files /dev/null and b/dist/images/creatures/Werewolf#Liliya.png differ diff --git a/dist/images/creatures/Werewolf#Milla.png b/dist/images/creatures/Werewolf#Milla.png new file mode 100644 index 0000000..375b31b Binary files /dev/null and b/dist/images/creatures/Werewolf#Milla.png differ diff --git a/dist/images/creatures/Werewolf#Nikita.png b/dist/images/creatures/Werewolf#Nikita.png new file mode 100644 index 0000000..5a76f6b Binary files /dev/null and b/dist/images/creatures/Werewolf#Nikita.png differ diff --git a/dist/images/creatures/Werewolf#Nikolai.png b/dist/images/creatures/Werewolf#Nikolai.png new file mode 100644 index 0000000..ae78e0a Binary files /dev/null and b/dist/images/creatures/Werewolf#Nikolai.png differ diff --git a/dist/images/creatures/Werewolf#Sofiya.png b/dist/images/creatures/Werewolf#Sofiya.png new file mode 100644 index 0000000..c3c5df4 Binary files /dev/null and b/dist/images/creatures/Werewolf#Sofiya.png differ diff --git a/dist/images/creatures/Werewolf#Svetlana.png b/dist/images/creatures/Werewolf#Svetlana.png new file mode 100644 index 0000000..0775c7b Binary files /dev/null and b/dist/images/creatures/Werewolf#Svetlana.png differ diff --git a/dist/images/creatures/Werewolf#Vera.png b/dist/images/creatures/Werewolf#Vera.png new file mode 100644 index 0000000..bbd61b5 Binary files /dev/null and b/dist/images/creatures/Werewolf#Vera.png differ diff --git a/dist/images/creatures/Werewolf#Yadviga.png b/dist/images/creatures/Werewolf#Yadviga.png new file mode 100644 index 0000000..a8cab0a Binary files /dev/null and b/dist/images/creatures/Werewolf#Yadviga.png differ diff --git a/dist/images/creatures/Werewolf#Yuri.png b/dist/images/creatures/Werewolf#Yuri.png new file mode 100644 index 0000000..985c854 Binary files /dev/null and b/dist/images/creatures/Werewolf#Yuri.png differ diff --git a/dist/images/creatures/Werewolf#Zoja.png b/dist/images/creatures/Werewolf#Zoja.png new file mode 100644 index 0000000..b170899 Binary files /dev/null and b/dist/images/creatures/Werewolf#Zoja.png differ diff --git a/dist/images/creatures/White wolf#Default.png b/dist/images/creatures/White wolf#Default.png new file mode 100644 index 0000000..f4c6da2 Binary files /dev/null and b/dist/images/creatures/White wolf#Default.png differ diff --git a/dist/images/creatures/Wight (Missing, Presumed Death)#Default.png b/dist/images/creatures/Wight (Missing, Presumed Death)#Default.png new file mode 100644 index 0000000..1c39faa Binary files /dev/null and b/dist/images/creatures/Wight (Missing, Presumed Death)#Default.png differ diff --git a/dist/images/creatures/Wight ranger (Sliske's Endgame)#78 (Weak in slash).png b/dist/images/creatures/Wight ranger (Sliske's Endgame)#78 (Weak in slash).png new file mode 100644 index 0000000..1df2d3a Binary files /dev/null and b/dist/images/creatures/Wight ranger (Sliske's Endgame)#78 (Weak in slash).png differ diff --git a/dist/images/creatures/Wight ranger (Sliske's Endgame)#78.png b/dist/images/creatures/Wight ranger (Sliske's Endgame)#78.png new file mode 100644 index 0000000..1df2d3a Binary files /dev/null and b/dist/images/creatures/Wight ranger (Sliske's Endgame)#78.png differ diff --git a/dist/images/creatures/Wight ranger (Sliske's Endgame)#85.png b/dist/images/creatures/Wight ranger (Sliske's Endgame)#85.png new file mode 100644 index 0000000..1df2d3a Binary files /dev/null and b/dist/images/creatures/Wight ranger (Sliske's Endgame)#85.png differ diff --git a/dist/images/creatures/Wight ranger#Default.png b/dist/images/creatures/Wight ranger#Default.png new file mode 100644 index 0000000..595f2f7 Binary files /dev/null and b/dist/images/creatures/Wight ranger#Default.png differ diff --git a/dist/images/creatures/Wight#Default.png b/dist/images/creatures/Wight#Default.png new file mode 100644 index 0000000..ab49025 Binary files /dev/null and b/dist/images/creatures/Wight#Default.png differ diff --git a/dist/images/creatures/Wild dog#Default.png b/dist/images/creatures/Wild dog#Default.png new file mode 100644 index 0000000..a36b600 Binary files /dev/null and b/dist/images/creatures/Wild dog#Default.png differ diff --git a/dist/images/creatures/WildyWyrm (2015, historical)#Default.png b/dist/images/creatures/WildyWyrm (2015, historical)#Default.png new file mode 100644 index 0000000..fabdb27 Binary files /dev/null and b/dist/images/creatures/WildyWyrm (2015, historical)#Default.png differ diff --git a/dist/images/creatures/Wingman Skree#Default.png b/dist/images/creatures/Wingman Skree#Default.png new file mode 100644 index 0000000..ec70595 Binary files /dev/null and b/dist/images/creatures/Wingman Skree#Default.png differ diff --git a/dist/images/creatures/Wolf#Level 11 (1).png b/dist/images/creatures/Wolf#Level 11 (1).png new file mode 100644 index 0000000..67eb414 Binary files /dev/null and b/dist/images/creatures/Wolf#Level 11 (1).png differ diff --git a/dist/images/creatures/Wolf#Level 11 (2).png b/dist/images/creatures/Wolf#Level 11 (2).png new file mode 100644 index 0000000..67eb414 Binary files /dev/null and b/dist/images/creatures/Wolf#Level 11 (2).png differ diff --git a/dist/images/creatures/Wolf#Level 8 (1).png b/dist/images/creatures/Wolf#Level 8 (1).png new file mode 100644 index 0000000..6fd684c Binary files /dev/null and b/dist/images/creatures/Wolf#Level 8 (1).png differ diff --git a/dist/images/creatures/Wolf#Level 8 (2).png b/dist/images/creatures/Wolf#Level 8 (2).png new file mode 100644 index 0000000..6e87e9e Binary files /dev/null and b/dist/images/creatures/Wolf#Level 8 (2).png differ diff --git a/dist/images/creatures/Wyvern (elite)#Default.png b/dist/images/creatures/Wyvern (elite)#Default.png new file mode 100644 index 0000000..60a99da Binary files /dev/null and b/dist/images/creatures/Wyvern (elite)#Default.png differ diff --git a/dist/images/creatures/Wyvern#Default.png b/dist/images/creatures/Wyvern#Default.png new file mode 100644 index 0000000..60a99da Binary files /dev/null and b/dist/images/creatures/Wyvern#Default.png differ diff --git a/dist/images/creatures/Yor'Ger the Deceiver#Normal mode.png b/dist/images/creatures/Yor'Ger the Deceiver#Normal mode.png new file mode 100644 index 0000000..bb63a7a Binary files /dev/null and b/dist/images/creatures/Yor'Ger the Deceiver#Normal mode.png differ diff --git a/dist/images/creatures/Yor'Ger the Deceiver#Story mode.png b/dist/images/creatures/Yor'Ger the Deceiver#Story mode.png new file mode 100644 index 0000000..bb63a7a Binary files /dev/null and b/dist/images/creatures/Yor'Ger the Deceiver#Story mode.png differ diff --git a/dist/images/creatures/Young grotworm#Default.png b/dist/images/creatures/Young grotworm#Default.png new file mode 100644 index 0000000..b1636e3 Binary files /dev/null and b/dist/images/creatures/Young grotworm#Default.png differ diff --git a/dist/images/creatures/Zakl'n Gritch#Default.png b/dist/images/creatures/Zakl'n Gritch#Default.png new file mode 100644 index 0000000..3ab51de Binary files /dev/null and b/dist/images/creatures/Zakl'n Gritch#Default.png differ diff --git a/dist/images/creatures/Zamorak, Lord of Chaos#Hard mode.png b/dist/images/creatures/Zamorak, Lord of Chaos#Hard mode.png new file mode 100644 index 0000000..f16a796 Binary files /dev/null and b/dist/images/creatures/Zamorak, Lord of Chaos#Hard mode.png differ diff --git a/dist/images/creatures/Zamorak, Lord of Chaos#Normal mode.png b/dist/images/creatures/Zamorak, Lord of Chaos#Normal mode.png new file mode 100644 index 0000000..f16a796 Binary files /dev/null and b/dist/images/creatures/Zamorak, Lord of Chaos#Normal mode.png differ diff --git a/dist/images/creatures/Zamorak, Lord of Chaos#Story mode.png b/dist/images/creatures/Zamorak, Lord of Chaos#Story mode.png new file mode 100644 index 0000000..f16a796 Binary files /dev/null and b/dist/images/creatures/Zamorak, Lord of Chaos#Story mode.png differ diff --git a/dist/images/creatures/Zemouregal#Ancient Awakening.png b/dist/images/creatures/Zemouregal#Ancient Awakening.png new file mode 100644 index 0000000..f3b951c Binary files /dev/null and b/dist/images/creatures/Zemouregal#Ancient Awakening.png differ diff --git a/dist/images/creatures/Zemouregal#Battle of Forinthry.png b/dist/images/creatures/Zemouregal#Battle of Forinthry.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Battle of Forinthry.png differ diff --git a/dist/images/creatures/Zemouregal#Children of Mah (Freneskae cutscene).png b/dist/images/creatures/Zemouregal#Children of Mah (Freneskae cutscene).png new file mode 100644 index 0000000..299c687 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Children of Mah (Freneskae cutscene).png differ diff --git a/dist/images/creatures/Zemouregal#Children of Mah (examinable).png b/dist/images/creatures/Zemouregal#Children of Mah (examinable).png new file mode 100644 index 0000000..65c274c Binary files /dev/null and b/dist/images/creatures/Zemouregal#Children of Mah (examinable).png differ diff --git a/dist/images/creatures/Zemouregal#Children of Mah.png b/dist/images/creatures/Zemouregal#Children of Mah.png new file mode 100644 index 0000000..7ef4ecd Binary files /dev/null and b/dist/images/creatures/Zemouregal#Children of Mah.png differ diff --git a/dist/images/creatures/Zemouregal#Daughter of Chaos.png b/dist/images/creatures/Zemouregal#Daughter of Chaos.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Daughter of Chaos.png differ diff --git a/dist/images/creatures/Zemouregal#Dead and Buried.png b/dist/images/creatures/Zemouregal#Dead and Buried.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Dead and Buried.png differ diff --git a/dist/images/creatures/Zemouregal#Defender of Varrock (1).png b/dist/images/creatures/Zemouregal#Defender of Varrock (1).png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Defender of Varrock (1).png differ diff --git a/dist/images/creatures/Zemouregal#Defender of Varrock (2).png b/dist/images/creatures/Zemouregal#Defender of Varrock (2).png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Defender of Varrock (2).png differ diff --git a/dist/images/creatures/Zemouregal#Dimension of Disaster.png b/dist/images/creatures/Zemouregal#Dimension of Disaster.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Dimension of Disaster.png differ diff --git a/dist/images/creatures/Zemouregal#Dishonour among Thieves (cutscene).png b/dist/images/creatures/Zemouregal#Dishonour among Thieves (cutscene).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Dishonour among Thieves (cutscene).png differ diff --git a/dist/images/creatures/Zemouregal#Dishonour among Thieves (lair).png b/dist/images/creatures/Zemouregal#Dishonour among Thieves (lair).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Dishonour among Thieves (lair).png differ diff --git a/dist/images/creatures/Zemouregal#Dishonour among Thieves (lair, examinable).png b/dist/images/creatures/Zemouregal#Dishonour among Thieves (lair, examinable).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Dishonour among Thieves (lair, examinable).png differ diff --git a/dist/images/creatures/Zemouregal#Dishonour among Thieves.png b/dist/images/creatures/Zemouregal#Dishonour among Thieves.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Dishonour among Thieves.png differ diff --git a/dist/images/creatures/Zemouregal#Missing, Presumed Death.png b/dist/images/creatures/Zemouregal#Missing, Presumed Death.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Missing, Presumed Death.png differ diff --git a/dist/images/creatures/Zemouregal#Nadir.png b/dist/images/creatures/Zemouregal#Nadir.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Nadir.png differ diff --git a/dist/images/creatures/Zemouregal#Requiem for a Dragon.png b/dist/images/creatures/Zemouregal#Requiem for a Dragon.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Requiem for a Dragon.png differ diff --git a/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort).png b/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort).png differ diff --git a/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort, skeletal).png b/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort, skeletal).png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort, skeletal).png differ diff --git a/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat.png b/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Ritual of the Mahjarrat.png differ diff --git a/dist/images/creatures/Zemouregal#Succession (skeletal).png b/dist/images/creatures/Zemouregal#Succession (skeletal).png new file mode 100644 index 0000000..f09cb9d Binary files /dev/null and b/dist/images/creatures/Zemouregal#Succession (skeletal).png differ diff --git a/dist/images/creatures/Zemouregal#Succession.png b/dist/images/creatures/Zemouregal#Succession.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Succession.png differ diff --git a/dist/images/creatures/Zemouregal#The World Wakes.png b/dist/images/creatures/Zemouregal#The World Wakes.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/dist/images/creatures/Zemouregal#The World Wakes.png differ diff --git a/dist/images/creatures/Zemouregal#TzekHaar Front.png b/dist/images/creatures/Zemouregal#TzekHaar Front.png new file mode 100644 index 0000000..04e1274 Binary files /dev/null and b/dist/images/creatures/Zemouregal#TzekHaar Front.png differ diff --git a/dist/images/creatures/Zemouregal#Unwelcome Guests.png b/dist/images/creatures/Zemouregal#Unwelcome Guests.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/dist/images/creatures/Zemouregal#Unwelcome Guests.png differ diff --git a/dist/images/creatures/Zogre#1.png b/dist/images/creatures/Zogre#1.png new file mode 100644 index 0000000..8d6296f Binary files /dev/null and b/dist/images/creatures/Zogre#1.png differ diff --git a/dist/images/creatures/Zogre#2.png b/dist/images/creatures/Zogre#2.png new file mode 100644 index 0000000..8502d10 Binary files /dev/null and b/dist/images/creatures/Zogre#2.png differ diff --git a/dist/images/creatures/Zogre#3.png b/dist/images/creatures/Zogre#3.png new file mode 100644 index 0000000..9d112c4 Binary files /dev/null and b/dist/images/creatures/Zogre#3.png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#72.png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#72.png new file mode 100644 index 0000000..92d156d Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#72.png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (1).png new file mode 100644 index 0000000..c5d5eef Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (2).png new file mode 100644 index 0000000..9f83c51 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (1).png new file mode 100644 index 0000000..06de319 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (2).png new file mode 100644 index 0000000..2ba2330 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (1).png new file mode 100644 index 0000000..e76e09e Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (2).png new file mode 100644 index 0000000..28af945 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (1).png new file mode 100644 index 0000000..7a96aea Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (2).png new file mode 100644 index 0000000..0944563 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (1).png new file mode 100644 index 0000000..b262592 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (2).png new file mode 100644 index 0000000..b303cd0 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (1).png new file mode 100644 index 0000000..2f34518 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (2).png new file mode 100644 index 0000000..f46a419 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (3).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (3).png new file mode 100644 index 0000000..eaf1839 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (3).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (1).png new file mode 100644 index 0000000..5c94a21 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (2).png new file mode 100644 index 0000000..9a57651 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (2).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (1).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (1).png new file mode 100644 index 0000000..658cc42 Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (1).png differ diff --git a/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (2).png b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (2).png new file mode 100644 index 0000000..c25286e Binary files /dev/null and b/dist/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (2).png differ diff --git a/dist/images/creatures/Zombie (New Varrock)#Default.png b/dist/images/creatures/Zombie (New Varrock)#Default.png new file mode 100644 index 0000000..3da8c1e Binary files /dev/null and b/dist/images/creatures/Zombie (New Varrock)#Default.png differ diff --git a/dist/images/creatures/Zombie (Stronghold of Security)#Level 12.png b/dist/images/creatures/Zombie (Stronghold of Security)#Level 12.png new file mode 100644 index 0000000..8169a33 Binary files /dev/null and b/dist/images/creatures/Zombie (Stronghold of Security)#Level 12.png differ diff --git a/dist/images/creatures/Zombie (Stronghold of Security)#Level 21.png b/dist/images/creatures/Zombie (Stronghold of Security)#Level 21.png new file mode 100644 index 0000000..ac0c282 Binary files /dev/null and b/dist/images/creatures/Zombie (Stronghold of Security)#Level 21.png differ diff --git a/dist/images/creatures/Zombie (Temple Trekking)#Default.png b/dist/images/creatures/Zombie (Temple Trekking)#Default.png new file mode 100644 index 0000000..da0839b Binary files /dev/null and b/dist/images/creatures/Zombie (Temple Trekking)#Default.png differ diff --git a/dist/images/creatures/Zombie (The Shadow Reef)#Normal mode.png b/dist/images/creatures/Zombie (The Shadow Reef)#Normal mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/dist/images/creatures/Zombie (The Shadow Reef)#Normal mode.png differ diff --git a/dist/images/creatures/Zombie (The Shadow Reef)#Story mode.png b/dist/images/creatures/Zombie (The Shadow Reef)#Story mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/dist/images/creatures/Zombie (The Shadow Reef)#Story mode.png differ diff --git a/dist/images/creatures/Zombie (Uncharted Isles)#Aggressive.png b/dist/images/creatures/Zombie (Uncharted Isles)#Aggressive.png new file mode 100644 index 0000000..a324bd4 Binary files /dev/null and b/dist/images/creatures/Zombie (Uncharted Isles)#Aggressive.png differ diff --git a/dist/images/creatures/Zombie (Uncharted Isles)#Female.png b/dist/images/creatures/Zombie (Uncharted Isles)#Female.png new file mode 100644 index 0000000..7712fc5 Binary files /dev/null and b/dist/images/creatures/Zombie (Uncharted Isles)#Female.png differ diff --git a/dist/images/creatures/Zombie (Uncharted Isles)#Male.png b/dist/images/creatures/Zombie (Uncharted Isles)#Male.png new file mode 100644 index 0000000..a324bd4 Binary files /dev/null and b/dist/images/creatures/Zombie (Uncharted Isles)#Male.png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 22 (1).png b/dist/images/creatures/Zombie (Wilderness)#Level 22 (1).png new file mode 100644 index 0000000..3a677a2 Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 22 (1).png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 22 (2).png b/dist/images/creatures/Zombie (Wilderness)#Level 22 (2).png new file mode 100644 index 0000000..ab4f2ae Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 22 (2).png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 22 (3).png b/dist/images/creatures/Zombie (Wilderness)#Level 22 (3).png new file mode 100644 index 0000000..48d9847 Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 22 (3).png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 29 (1).png b/dist/images/creatures/Zombie (Wilderness)#Level 29 (1).png new file mode 100644 index 0000000..b630977 Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 29 (1).png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 29 (2).png b/dist/images/creatures/Zombie (Wilderness)#Level 29 (2).png new file mode 100644 index 0000000..1408a39 Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 29 (2).png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 29 (3).png b/dist/images/creatures/Zombie (Wilderness)#Level 29 (3).png new file mode 100644 index 0000000..b417efa Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 29 (3).png differ diff --git a/dist/images/creatures/Zombie (Wilderness)#Level 29 (4).png b/dist/images/creatures/Zombie (Wilderness)#Level 29 (4).png new file mode 100644 index 0000000..6d3556f Binary files /dev/null and b/dist/images/creatures/Zombie (Wilderness)#Level 29 (4).png differ diff --git a/dist/images/creatures/Zombie (Zogre Flesh Eaters)#Default.png b/dist/images/creatures/Zombie (Zogre Flesh Eaters)#Default.png new file mode 100644 index 0000000..8c8d2eb Binary files /dev/null and b/dist/images/creatures/Zombie (Zogre Flesh Eaters)#Default.png differ diff --git a/dist/images/creatures/Zombie cow (New Varrock)#Boss.png b/dist/images/creatures/Zombie cow (New Varrock)#Boss.png new file mode 100644 index 0000000..16be64c Binary files /dev/null and b/dist/images/creatures/Zombie cow (New Varrock)#Boss.png differ diff --git a/dist/images/creatures/Zombie cow (New Varrock)#Regular.png b/dist/images/creatures/Zombie cow (New Varrock)#Regular.png new file mode 100644 index 0000000..16be64c Binary files /dev/null and b/dist/images/creatures/Zombie cow (New Varrock)#Regular.png differ diff --git a/dist/images/creatures/Zombie hand#Default.png b/dist/images/creatures/Zombie hand#Default.png new file mode 100644 index 0000000..d73e640 Binary files /dev/null and b/dist/images/creatures/Zombie hand#Default.png differ diff --git a/dist/images/creatures/Zombie knight#Ancient Awakening.png b/dist/images/creatures/Zombie knight#Ancient Awakening.png new file mode 100644 index 0000000..16e760b Binary files /dev/null and b/dist/images/creatures/Zombie knight#Ancient Awakening.png differ diff --git a/dist/images/creatures/Zombie knight#Ungael combat activity (hard).png b/dist/images/creatures/Zombie knight#Ungael combat activity (hard).png new file mode 100644 index 0000000..16e760b Binary files /dev/null and b/dist/images/creatures/Zombie knight#Ungael combat activity (hard).png differ diff --git a/dist/images/creatures/Zombie knight#Ungael combat activity (standard).png b/dist/images/creatures/Zombie knight#Ungael combat activity (standard).png new file mode 100644 index 0000000..16e760b Binary files /dev/null and b/dist/images/creatures/Zombie knight#Ungael combat activity (standard).png differ diff --git a/dist/images/creatures/Zombie pirate#Level 49.png b/dist/images/creatures/Zombie pirate#Level 49.png new file mode 100644 index 0000000..c418c5b Binary files /dev/null and b/dist/images/creatures/Zombie pirate#Level 49.png differ diff --git a/dist/images/creatures/Zombie pirate#Level 50.png b/dist/images/creatures/Zombie pirate#Level 50.png new file mode 100644 index 0000000..6aa5b68 Binary files /dev/null and b/dist/images/creatures/Zombie pirate#Level 50.png differ diff --git a/dist/images/creatures/Zombie pirate#Pieces of Hate.png b/dist/images/creatures/Zombie pirate#Pieces of Hate.png new file mode 100644 index 0000000..c418c5b Binary files /dev/null and b/dist/images/creatures/Zombie pirate#Pieces of Hate.png differ diff --git a/dist/images/creatures/Zombie swab#Default.png b/dist/images/creatures/Zombie swab#Default.png new file mode 100644 index 0000000..c3902ed Binary files /dev/null and b/dist/images/creatures/Zombie swab#Default.png differ diff --git a/dist/images/creatures/Zombie warrior#1 (Ancient Awakening).png b/dist/images/creatures/Zombie warrior#1 (Ancient Awakening).png new file mode 100644 index 0000000..1d81fb1 Binary files /dev/null and b/dist/images/creatures/Zombie warrior#1 (Ancient Awakening).png differ diff --git a/dist/images/creatures/Zombie warrior#1 (Ungael combat activity).png b/dist/images/creatures/Zombie warrior#1 (Ungael combat activity).png new file mode 100644 index 0000000..1d81fb1 Binary files /dev/null and b/dist/images/creatures/Zombie warrior#1 (Ungael combat activity).png differ diff --git a/dist/images/creatures/Zombie warrior#2 (Ancient Awakening).png b/dist/images/creatures/Zombie warrior#2 (Ancient Awakening).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/dist/images/creatures/Zombie warrior#2 (Ancient Awakening).png differ diff --git a/dist/images/creatures/Zombie warrior#2 (Ungael combat activity).png b/dist/images/creatures/Zombie warrior#2 (Ungael combat activity).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/dist/images/creatures/Zombie warrior#2 (Ungael combat activity).png differ diff --git a/dist/images/creatures/Zombie#Level 12.png b/dist/images/creatures/Zombie#Level 12.png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/dist/images/creatures/Zombie#Level 12.png differ diff --git a/dist/images/creatures/Zombie#Level 22 (Graveyard of Shadows).png b/dist/images/creatures/Zombie#Level 22 (Graveyard of Shadows).png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/dist/images/creatures/Zombie#Level 22 (Graveyard of Shadows).png differ diff --git a/dist/images/creatures/Zombie#Level 22.png b/dist/images/creatures/Zombie#Level 22.png new file mode 100644 index 0000000..8f662b8 Binary files /dev/null and b/dist/images/creatures/Zombie#Level 22.png differ diff --git a/dist/images/creatures/Zombie#Level 29 (Entrana).png b/dist/images/creatures/Zombie#Level 29 (Entrana).png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/dist/images/creatures/Zombie#Level 29 (Entrana).png differ diff --git a/dist/images/creatures/Zombie#Level 29 (Graveyard of Shadows).png b/dist/images/creatures/Zombie#Level 29 (Graveyard of Shadows).png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/dist/images/creatures/Zombie#Level 29 (Graveyard of Shadows).png differ diff --git a/dist/images/creatures/Zombie#Level 29.png b/dist/images/creatures/Zombie#Level 29.png new file mode 100644 index 0000000..b630977 Binary files /dev/null and b/dist/images/creatures/Zombie#Level 29.png differ diff --git a/dist/images/icon.png b/dist/images/icon.png new file mode 100644 index 0000000..f603f85 Binary files /dev/null and b/dist/images/icon.png differ diff --git a/dist/images/masters/Chaeldar.png b/dist/images/masters/Chaeldar.png new file mode 100644 index 0000000..f2923a2 Binary files /dev/null and b/dist/images/masters/Chaeldar.png differ diff --git a/dist/images/masters/Duradel.png b/dist/images/masters/Duradel.png new file mode 100644 index 0000000..8a015e3 Binary files /dev/null and b/dist/images/masters/Duradel.png differ diff --git a/dist/images/masters/Jacquelyn.png b/dist/images/masters/Jacquelyn.png new file mode 100644 index 0000000..385405e Binary files /dev/null and b/dist/images/masters/Jacquelyn.png differ diff --git a/dist/images/masters/Kuradal.png b/dist/images/masters/Kuradal.png new file mode 100644 index 0000000..efc6507 Binary files /dev/null and b/dist/images/masters/Kuradal.png differ diff --git a/dist/images/masters/Laniakea.png b/dist/images/masters/Laniakea.png new file mode 100644 index 0000000..da9cd2f Binary files /dev/null and b/dist/images/masters/Laniakea.png differ diff --git a/dist/images/masters/Mandrith.png b/dist/images/masters/Mandrith.png new file mode 100644 index 0000000..ab75bfb Binary files /dev/null and b/dist/images/masters/Mandrith.png differ diff --git a/dist/images/masters/Mazchna.png b/dist/images/masters/Mazchna.png new file mode 100644 index 0000000..5385ad4 Binary files /dev/null and b/dist/images/masters/Mazchna.png differ diff --git a/dist/images/masters/Morvran.png b/dist/images/masters/Morvran.png new file mode 100644 index 0000000..92bb8c2 Binary files /dev/null and b/dist/images/masters/Morvran.png differ diff --git a/dist/images/masters/Sumona.png b/dist/images/masters/Sumona.png new file mode 100644 index 0000000..f126916 Binary files /dev/null and b/dist/images/masters/Sumona.png differ diff --git a/dist/images/masters/The Raptor.png b/dist/images/masters/The Raptor.png new file mode 100644 index 0000000..d7984f9 Binary files /dev/null and b/dist/images/masters/The Raptor.png differ diff --git a/dist/images/masters/Turael.png b/dist/images/masters/Turael.png new file mode 100644 index 0000000..3efbf40 Binary files /dev/null and b/dist/images/masters/Turael.png differ diff --git a/dist/images/masters/Vannaka.png b/dist/images/masters/Vannaka.png new file mode 100644 index 0000000..b337aeb Binary files /dev/null and b/dist/images/masters/Vannaka.png differ diff --git a/dist/images/misc/combat.png b/dist/images/misc/combat.png new file mode 100644 index 0000000..e1def8b Binary files /dev/null and b/dist/images/misc/combat.png differ diff --git a/dist/images/misc/defence.png b/dist/images/misc/defence.png new file mode 100644 index 0000000..e91d7c8 Binary files /dev/null and b/dist/images/misc/defence.png differ diff --git a/dist/images/misc/lifepoints.png b/dist/images/misc/lifepoints.png new file mode 100644 index 0000000..bf7de60 Binary files /dev/null and b/dist/images/misc/lifepoints.png differ diff --git a/dist/images/misc/magic.png b/dist/images/misc/magic.png new file mode 100644 index 0000000..aa48a5a Binary files /dev/null and b/dist/images/misc/magic.png differ diff --git a/dist/images/misc/melee.png b/dist/images/misc/melee.png new file mode 100644 index 0000000..4a2671c Binary files /dev/null and b/dist/images/misc/melee.png differ diff --git a/dist/images/misc/necromancy.png b/dist/images/misc/necromancy.png new file mode 100644 index 0000000..d4e8d5f Binary files /dev/null and b/dist/images/misc/necromancy.png differ diff --git a/dist/images/misc/ranged.png b/dist/images/misc/ranged.png new file mode 100644 index 0000000..9718ffe Binary files /dev/null and b/dist/images/misc/ranged.png differ diff --git a/dist/images/misc/slayer.png b/dist/images/misc/slayer.png new file mode 100644 index 0000000..e8c1db9 Binary files /dev/null and b/dist/images/misc/slayer.png differ diff --git a/dist/images/misc/spec.png b/dist/images/misc/spec.png new file mode 100644 index 0000000..7dae6ab Binary files /dev/null and b/dist/images/misc/spec.png differ diff --git a/dist/images/preview/SlayerAssistant.png b/dist/images/preview/SlayerAssistant.png new file mode 100644 index 0000000..568fe3d Binary files /dev/null and b/dist/images/preview/SlayerAssistant.png differ diff --git a/dist/images/preview/SlayerAssistantNewLookNFeel.png b/dist/images/preview/SlayerAssistantNewLookNFeel.png new file mode 100644 index 0000000..7c09432 Binary files /dev/null and b/dist/images/preview/SlayerAssistantNewLookNFeel.png differ diff --git a/dist/images/preview/SlayerAssistantUpdate20240611.png b/dist/images/preview/SlayerAssistantUpdate20240611.png new file mode 100644 index 0000000..f4f50b2 Binary files /dev/null and b/dist/images/preview/SlayerAssistantUpdate20240611.png differ diff --git a/dist/images/preview/SlayerAssistantUpdate20240615.png b/dist/images/preview/SlayerAssistantUpdate20240615.png new file mode 100644 index 0000000..07b0984 Binary files /dev/null and b/dist/images/preview/SlayerAssistantUpdate20240615.png differ diff --git a/dist/images/susceptible/Abyssal_head.png b/dist/images/susceptible/Abyssal_head.png new file mode 100644 index 0000000..29d077f Binary files /dev/null and b/dist/images/susceptible/Abyssal_head.png differ diff --git a/dist/images/susceptible/Balmung.png b/dist/images/susceptible/Balmung.png new file mode 100644 index 0000000..4b0544c Binary files /dev/null and b/dist/images/susceptible/Balmung.png differ diff --git a/dist/images/susceptible/Basilisk_head.png b/dist/images/susceptible/Basilisk_head.png new file mode 100644 index 0000000..8470f40 Binary files /dev/null and b/dist/images/susceptible/Basilisk_head.png differ diff --git a/dist/images/susceptible/Blisterwood_staff.png b/dist/images/susceptible/Blisterwood_staff.png new file mode 100644 index 0000000..1f44692 Binary files /dev/null and b/dist/images/susceptible/Blisterwood_staff.png differ diff --git a/dist/images/susceptible/Corrupt_Vesta's_longsword.png b/dist/images/susceptible/Corrupt_Vesta's_longsword.png new file mode 100644 index 0000000..1fa62a5 Binary files /dev/null and b/dist/images/susceptible/Corrupt_Vesta's_longsword.png differ diff --git a/dist/images/susceptible/Demon_Slayer_(perk).png b/dist/images/susceptible/Demon_Slayer_(perk).png new file mode 100644 index 0000000..f010ce4 Binary files /dev/null and b/dist/images/susceptible/Demon_Slayer_(perk).png differ diff --git a/dist/images/susceptible/Dragon_Slayer_(perk).png b/dist/images/susceptible/Dragon_Slayer_(perk).png new file mode 100644 index 0000000..863f821 Binary files /dev/null and b/dist/images/susceptible/Dragon_Slayer_(perk).png differ diff --git a/dist/images/susceptible/Ghost_hunter_backpack.png b/dist/images/susceptible/Ghost_hunter_backpack.png new file mode 100644 index 0000000..5dc8178 Binary files /dev/null and b/dist/images/susceptible/Ghost_hunter_backpack.png differ diff --git a/dist/images/susceptible/Hexhunter_bow.png b/dist/images/susceptible/Hexhunter_bow.png new file mode 100644 index 0000000..bfe434a Binary files /dev/null and b/dist/images/susceptible/Hexhunter_bow.png differ diff --git a/dist/images/susceptible/Ice_Barrage_icon.png b/dist/images/susceptible/Ice_Barrage_icon.png new file mode 100644 index 0000000..44b35ab Binary files /dev/null and b/dist/images/susceptible/Ice_Barrage_icon.png differ diff --git a/dist/images/susceptible/Inquisitor_staff.png b/dist/images/susceptible/Inquisitor_staff.png new file mode 100644 index 0000000..667af4b Binary files /dev/null and b/dist/images/susceptible/Inquisitor_staff.png differ diff --git a/dist/images/susceptible/Keris.png b/dist/images/susceptible/Keris.png new file mode 100644 index 0000000..4880e9b Binary files /dev/null and b/dist/images/susceptible/Keris.png differ diff --git a/dist/images/susceptible/Necklace_of_Salamancy.png b/dist/images/susceptible/Necklace_of_Salamancy.png new file mode 100644 index 0000000..9c20c04 Binary files /dev/null and b/dist/images/susceptible/Necklace_of_Salamancy.png differ diff --git a/dist/images/susceptible/Steel_brutal_2.png b/dist/images/susceptible/Steel_brutal_2.png new file mode 100644 index 0000000..566ab3d Binary files /dev/null and b/dist/images/susceptible/Steel_brutal_2.png differ diff --git a/dist/images/susceptible/Terrasaur_maul.png b/dist/images/susceptible/Terrasaur_maul.png new file mode 100644 index 0000000..b79334d Binary files /dev/null and b/dist/images/susceptible/Terrasaur_maul.png differ diff --git a/dist/images/susceptible/Undead_Slayer.png b/dist/images/susceptible/Undead_Slayer.png new file mode 100644 index 0000000..a35289f Binary files /dev/null and b/dist/images/susceptible/Undead_Slayer.png differ diff --git a/dist/images/ui/default/about/Reaper_counter.png b/dist/images/ui/default/about/Reaper_counter.png new file mode 100644 index 0000000..7a57927 Binary files /dev/null and b/dist/images/ui/default/about/Reaper_counter.png differ diff --git a/dist/images/ui/default/about/Reaper_counter_expanded.png b/dist/images/ui/default/about/Reaper_counter_expanded.png new file mode 100644 index 0000000..d498e4c Binary files /dev/null and b/dist/images/ui/default/about/Reaper_counter_expanded.png differ diff --git a/dist/images/ui/default/about/Reaper_task_interface.png b/dist/images/ui/default/about/Reaper_task_interface.png new file mode 100644 index 0000000..54b28bf Binary files /dev/null and b/dist/images/ui/default/about/Reaper_task_interface.png differ diff --git a/dist/images/ui/default/about/Right_click_interface.png b/dist/images/ui/default/about/Right_click_interface.png new file mode 100644 index 0000000..493ad62 Binary files /dev/null and b/dist/images/ui/default/about/Right_click_interface.png differ diff --git a/dist/images/ui/default/about/Select_your_own_task.png b/dist/images/ui/default/about/Select_your_own_task.png new file mode 100644 index 0000000..d0c8542 Binary files /dev/null and b/dist/images/ui/default/about/Select_your_own_task.png differ diff --git a/dist/images/ui/default/about/Slayer_assistant_interface.png b/dist/images/ui/default/about/Slayer_assistant_interface.png new file mode 100644 index 0000000..6269b5f Binary files /dev/null and b/dist/images/ui/default/about/Slayer_assistant_interface.png differ diff --git a/dist/images/ui/default/about/Slayer_assistant_interface.xcf b/dist/images/ui/default/about/Slayer_assistant_interface.xcf new file mode 100644 index 0000000..341698a Binary files /dev/null and b/dist/images/ui/default/about/Slayer_assistant_interface.xcf differ diff --git a/dist/images/ui/default/about/Slayer_counter.png b/dist/images/ui/default/about/Slayer_counter.png new file mode 100644 index 0000000..807332e Binary files /dev/null and b/dist/images/ui/default/about/Slayer_counter.png differ diff --git a/dist/images/ui/default/about/Slayer_counter_expanded.png b/dist/images/ui/default/about/Slayer_counter_expanded.png new file mode 100644 index 0000000..b5353bc Binary files /dev/null and b/dist/images/ui/default/about/Slayer_counter_expanded.png differ diff --git a/dist/images/ui/default/about/Slayer_task_interface.png b/dist/images/ui/default/about/Slayer_task_interface.png new file mode 100644 index 0000000..51123c9 Binary files /dev/null and b/dist/images/ui/default/about/Slayer_task_interface.png differ diff --git a/dist/images/ui/default/about/VIP_ticket_interface.png b/dist/images/ui/default/about/VIP_ticket_interface.png new file mode 100644 index 0000000..89d3626 Binary files /dev/null and b/dist/images/ui/default/about/VIP_ticket_interface.png differ diff --git a/dist/images/ui/default/back.png b/dist/images/ui/default/back.png new file mode 100644 index 0000000..9d23646 Binary files /dev/null and b/dist/images/ui/default/back.png differ diff --git a/dist/images/ui/default/background.png b/dist/images/ui/default/background.png new file mode 100644 index 0000000..d6ef4bb Binary files /dev/null and b/dist/images/ui/default/background.png differ diff --git a/dist/images/ui/default/donate.png b/dist/images/ui/default/donate.png new file mode 100644 index 0000000..46dde21 Binary files /dev/null and b/dist/images/ui/default/donate.png differ diff --git a/dist/images/ui/default/forward.png b/dist/images/ui/default/forward.png new file mode 100644 index 0000000..b8907f9 Binary files /dev/null and b/dist/images/ui/default/forward.png differ diff --git a/dist/images/ui/default/infoicon.png b/dist/images/ui/default/infoicon.png new file mode 100644 index 0000000..7177084 Binary files /dev/null and b/dist/images/ui/default/infoicon.png differ diff --git a/dist/images/ui/default/nisbutton.png b/dist/images/ui/default/nisbutton.png new file mode 100644 index 0000000..496b8e7 Binary files /dev/null and b/dist/images/ui/default/nisbutton.png differ diff --git a/dist/images/ui/default/settingscog.png b/dist/images/ui/default/settingscog.png new file mode 100644 index 0000000..96265cf Binary files /dev/null and b/dist/images/ui/default/settingscog.png differ diff --git a/dist/images/ui/default/wikipedia.png b/dist/images/ui/default/wikipedia.png new file mode 100644 index 0000000..1f9a7a7 Binary files /dev/null and b/dist/images/ui/default/wikipedia.png differ diff --git a/dist/images/weakness/Air_weakness_icon.png b/dist/images/weakness/Air_weakness_icon.png new file mode 100644 index 0000000..20244ce Binary files /dev/null and b/dist/images/weakness/Air_weakness_icon.png differ diff --git a/dist/images/weakness/Arrow_weakness_icon.png b/dist/images/weakness/Arrow_weakness_icon.png new file mode 100644 index 0000000..7a996ab Binary files /dev/null and b/dist/images/weakness/Arrow_weakness_icon.png differ diff --git a/dist/images/weakness/Bolt_weakness_icon.png b/dist/images/weakness/Bolt_weakness_icon.png new file mode 100644 index 0000000..5e9ef1b Binary files /dev/null and b/dist/images/weakness/Bolt_weakness_icon.png differ diff --git a/dist/images/weakness/Crush_weakness_icon.png b/dist/images/weakness/Crush_weakness_icon.png new file mode 100644 index 0000000..4bf250e Binary files /dev/null and b/dist/images/weakness/Crush_weakness_icon.png differ diff --git a/dist/images/weakness/Earth_weakness_icon.png b/dist/images/weakness/Earth_weakness_icon.png new file mode 100644 index 0000000..fd407bd Binary files /dev/null and b/dist/images/weakness/Earth_weakness_icon.png differ diff --git a/dist/images/weakness/Fire_weakness_icon.png b/dist/images/weakness/Fire_weakness_icon.png new file mode 100644 index 0000000..bf25460 Binary files /dev/null and b/dist/images/weakness/Fire_weakness_icon.png differ diff --git a/dist/images/weakness/Magic_weakness_icon.png b/dist/images/weakness/Magic_weakness_icon.png new file mode 100644 index 0000000..5bc4bf0 Binary files /dev/null and b/dist/images/weakness/Magic_weakness_icon.png differ diff --git a/dist/images/weakness/Melee_weakness_icon.png b/dist/images/weakness/Melee_weakness_icon.png new file mode 100644 index 0000000..e7c6dfb Binary files /dev/null and b/dist/images/weakness/Melee_weakness_icon.png differ diff --git a/dist/images/weakness/Necromancy-icon.png b/dist/images/weakness/Necromancy-icon.png new file mode 100644 index 0000000..6c7e50c Binary files /dev/null and b/dist/images/weakness/Necromancy-icon.png differ diff --git a/dist/images/weakness/Ranged_weakness_icon.png b/dist/images/weakness/Ranged_weakness_icon.png new file mode 100644 index 0000000..3349fbc Binary files /dev/null and b/dist/images/weakness/Ranged_weakness_icon.png differ diff --git a/dist/images/weakness/Slash_weakness_icon.png b/dist/images/weakness/Slash_weakness_icon.png new file mode 100644 index 0000000..b627f15 Binary files /dev/null and b/dist/images/weakness/Slash_weakness_icon.png differ diff --git a/dist/images/weakness/Stab_weakness_icon.png b/dist/images/weakness/Stab_weakness_icon.png new file mode 100644 index 0000000..a65ba88 Binary files /dev/null and b/dist/images/weakness/Stab_weakness_icon.png differ diff --git a/dist/images/weakness/Thrown_weakness_icon.png b/dist/images/weakness/Thrown_weakness_icon.png new file mode 100644 index 0000000..85d069e Binary files /dev/null and b/dist/images/weakness/Thrown_weakness_icon.png differ diff --git a/dist/images/weakness/Water_weakness_icon.png b/dist/images/weakness/Water_weakness_icon.png new file mode 100644 index 0000000..840989c Binary files /dev/null and b/dist/images/weakness/Water_weakness_icon.png differ diff --git a/dist/images/weakness/Zero_weakness_icon.png b/dist/images/weakness/Zero_weakness_icon.png new file mode 100644 index 0000000..384a6dc Binary files /dev/null and b/dist/images/weakness/Zero_weakness_icon.png differ diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..92a2173 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,13 @@ + + + + + Slayer Assistant + + + + + + + + \ No newline at end of file diff --git a/dist/main.js b/dist/main.js new file mode 100644 index 0000000..3862de8 --- /dev/null +++ b/dist/main.js @@ -0,0 +1,6950 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory((function webpackLoadOptionalExternalModule() { try { return require("sharp"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("canvas"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("electron/common"); } catch(e) {} }())); + else if(typeof define === 'function' && define.amd) + define(["sharp", "canvas", "electron/common"], factory); + else if(typeof exports === 'object') + exports["SlayerAssistant"] = factory((function webpackLoadOptionalExternalModule() { try { return require("sharp"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("canvas"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("electron/common"); } catch(e) {} }())); + else + root["SlayerAssistant"] = factory(root["sharp"], root["canvas"], root["electron/common"]); +})(self, (__WEBPACK_EXTERNAL_MODULE_sharp__, __WEBPACK_EXTERNAL_MODULE_canvas__, __WEBPACK_EXTERNAL_MODULE_electron_common__) => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./images/data/reaper_collapsed_OSL.data.png": +/*!***************************************************!*\ + !*** ./images/data/reaper_collapsed_OSL.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAVXG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKrnKwAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAElUlEQVRYw92YTWgcZRjHfzsz+5HdzczuJumuJS3VSkI/AlaFgmK1PVStIJTSQy9FELy0gqIgIhYlUFHpQQ9tQZFCKWLVQ/FQ60GFUtAG0dqvNG0sRtc07WZ3Z3Zmdmd2Z8bDdiabTWJjipD4v8z7Mc/H+/m8zz/06p5dHrchdyYA0CoGvSt60coltIoBQMOt06h7JJJJACzLwK7VEMQosWiETFcGVdMBUOQkplmlVq1imhVy2Vygc+TK5aAudybu2O77oFVMnnwsyQPrN6KW4yB0MifcCiF7iND+fXu8H88OkU5349o1VENHFMM4Th0lkUSIxCiVCswX85X1/5urvV3Pb9d/55N3t2DWltHwVkEoMrcTng32JSR/tjVNDYzJsjI10Jo1p47ZJsTXoRo6GPqcsrKszDpwv32GDyEw1Bs4ngjh9JRAKAahKHgWeLWWAVaR/LLj1BkbywMwNpanI9bcotWaEfxv2XZQjkYiXL12nWhk5gwqioKqqli2Pa2/te7bmqu93Qe77nDu/BDr+w28RnNSQkIExCwISXB1cCbw3KaPIa+IpMjJaVvk50v5EHeNPP8Fdr8BZz4qeAe/tPn1WhzPq/H23g2sWrmai1eGGTx0HkVR6O8t88L2BIJpVpFlhXS6G0VRWOw49UOVc6NZUqkcHYleTnz/F43aCF99e4munpWsXf8Q48YAZ87pCLVqlVKp0NzfqrroB/fUth1YtonjuFh2nQ0DywlHQqy7z2OyWMYydAqTt3h4IIdgmpXgAmg9U4sVXekI772coSMRYuvm+xm4Z4TXD/zC4w92sPVRhZJe4YPBZ0kIfyDlsjny4zcRxfCsl8Niw9Gjx3j6kQTvv7QJt6Fx+DOH4TGZL04rPL+9j7pVoFE8wqmzIoIfpGeLOYsR3/y0mlc+dLlw4TSm/idqxcbDYdJIoZcvMjxymdcOCYzXn0HqXdHL1dFRlgpi0TCuu4J3jqq8uCPP3p1J9uIBo1wY0fn45HKW53pYt7YfSSuXAkE/rix2CIKAnExy4FOLG4Uqoijguh49mTir700gigJauYTkb8t0uptbN8tLZgU9z+G7z3czdL7AeAEycp2+zq8ZPBYP3seSf1tqmjrtNbLYIYph3hw8zM7NFhuzMFGEgycl6o5AWALTrCD19a8hP34Tx6kviVDgIyyJXBtfxVtH6jQcF0kU0E2N/r5mf1//mulnbimEgumrJxDviAZ1x50qa+VSMxSIYnjGw3gpwvdfFMNoFQMh05UJ8qeltnLtiEYiQRKQ6cog+PncUgnid0KQT2o6Av9jCH4+93+CKIZR5CRScbIYpPYdsQT79+3xipNFapaN61hEYjGW9WTnRf60EkrzJYzaSahlPVkWav/48RMBVVGcLBJ6btc2DyCb7cHQdXSjCjCD37gToaMkmqxYKym0EJl0unvB9uV0mkQyycTELQCkVCpOuWwyPHz5H1mqVsWtDvg3rWrogbPth/vfyMw1qPnoUm8TUul0N6lUHKlR9zg7NDQjiPukTfsXQFV1bKtBWStNk2knlRYiczf2p2LddbY8sYm/ATWM+pwqaFlsAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./images/data/reaper_collapsed_RS3.data.png": +/*!***************************************************!*\ + !*** ./images/data/reaper_collapsed_RS3.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAXKm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQRroAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAFsUlEQVRYw9WYXYglRxXHf11d3dX39p3vnZ3sRtZ8sZF86K4JRo2oD+JDFGEhYlDfonnOQ4jowz7qg/omq0YQCYgo+CCDUUEkGgzCIOaDXU1wY3CdZDc7M3vvnXvvVHV9tA99u2auIaJvMweaunWr6lT/65w+dc4/+cwXHqt3rl9FpCkAaSppxXvHQQnek+UKAFuZ+Ptgv229d9R1QMocAOcq6lDPzDnYAjO6236rx1nHE48scuaeBxj0uyDmeEcJuyTVBvLvr1ziX69fRgiBSFOctYTgWVhawWiNsxUyywnBI0RzAJXRAMgsI1cKPZngnCVXBUKkOFsBUHS7OLt/QJXRcZ/2sBo9eRyTWT6zJ0CnWzLc2eJ95x9hPBxAssR/lURRJ8sIgFwVhBDIlSJXBVJmDG5sIzMZN2tfztmKbq8XwU5GI5yzFJ0ygm5FTyYNiOlLdns9RJoiRPOEEAghxINyzlIZjcxyVFEQfLPH7qAPwHhwFae3IQzAX2+esAt11bTxvwHUe0gpGzcUQuCsQxVFfIzWpKmMfQDnPd5aTt12mvFoNDMmM4kqStI0wU2t4q0FQBUFznvyokOCIE2TGX0A8wuLhANrllePY7RGFQWpELz48gb33DmmdluNgUQO6RqIHoQR+GvUoTFEUu+Q3HX/R+qrm/8keE85N8/m5b8mHGL54w969YWfV/zhJUUnM3zj8fu45dTtXHzlb5y/cAnrEj5+xvLYubJxSyFSRJpGCxxmeeb5CesbS+y6OW74k/zi2Tdw+lXWf3eJ0L2VvWSF9Y0lfv/nYQMOwE1d4bDLpz79MGk9oQ41lTacvfckWZ5w9201zlbYyqDSwAfPnkRIKamMJlfFkQC3spTzw/M3cf975vnyZ+/i3hOv8tVvv8DH3t/h3IdrPvTeE/zsu5+jFFeQzrlptPRHAtzTT/+Yhx4s+ebjHyW4Id/7qefZl3LueG6ZR8+dxpot3M6PeOZPgnhjC5FitD704J767btZf/4qT3z+OW551wqD3Yr5Mmd7vMiof5F/XNnhWz9xaHUfydkHP1Ffef0yldEcW7uJ1y7+5VBHy8XjN9eJENR2wtcfHXL37b04dvHyiK98v0NeLnPq1juQxmhkJoHiSFiuTRGtTfnaUzm7ozGJENR1YHmppFN2EXmGMbpxS2cdldFH4ipor6xQjXjhl19i4+Ut3tyC5XnL6blf89CTGmebHFUqVcRoeRTAAewO+qSp4snzF/jiJy0PrMG1HfjOrxSORZzRKFU0lgvBx/zx0FtOpAjhSWXG+sYiv3lRIURCZSpWjq8RwnaM/M03J7OmIvCH/zpovasymk63SeC99yRCEKZuKwFjNEKpImbq/ghkKUZr9N64qSKm3iazPCbpMZVUBcIYjRDpkQkozlYUnTLWlvvuKlBFMa0L08ZyHFFpC9pcqWnNGN7+fZa9eSqjmVtYPDL33EEw7TUmswyjGxyV0ZS9+f1KfG8yJs2yQw9KZvmUIchmKv9OtyTNMvYm41gEyPFouM9x6D3uPPOB2k4DS9Ep0Xvjt7XZ9BDSKfnjXYW1lt7cPKPdYVzrXUUq8zhedMqZ+W2/1WmtjW2r4+D8LMtIZY7eG7N8bC3qb9cP+jcilvFo2Fzirf9WxnDtjU1CCAghprxKwbDfn3Im/Th33z08wXuKbpe33tyk6JQ4WxFCoNvrURkTSaNWX5s09He2Yx15sDLJlaIyhspsRivkSjEaDiLgnetvUXS7TEajmIAc3CtGS+fsTHrTslAHy6CG0PGRqZKZJARPZTQhhBmWq33Z0XAw4zrdXg9nK/LpgQbvp4yZiGE9eB+JpRZIZRouR4gm9WrnOuuYW1gEYHBjez/YONvklsdWV/8/n5cS5xwtseSc+5/XvJN4V9Et55lMRjO86X/qWFldwznHwtIKShWRVx3tDjh+4uaZ+cdWV/k3rAQo1Oy03j4AAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/reaper_expanded_OSL.data.png": +/*!**************************************************!*\ + !*** ./images/data/reaper_expanded_OSL.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAa4G5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ePXqQAAAYVub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqIw0NAAANGG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+dZ7WgAAAAZub1BFAAAAAAAA7Gu72AAAAAlub1BFAAAAAAAAAAAAoYpy1QAAAAdub1BFAAAAAAAAAFrm3tAAAAh/SURBVHja7ZxvbBt3Gcc/vnNsJ3Z8sZM0aedMZR0J7VqgA2looMGKNHXrNGma9mIgjaIheNEiDRWpmvivakyA9gJerEUgNFQNhIAXE0JjvABENQGtEGXr2qysILUN6R8n9p3vj3323fHCvYu9JKV/k3P3fKQo9tm/ex4/9/j8u+f33Dfx5V1PBFwiP5gFwKhZlCZKGNUKRs0CoOU3aTUDsrkcAI2GhVuvo6hpMukUxeEiumECoOVz2LZD3XGw7RrjY+PRPk++dSJ6nh/M/t/tK+nDzbQlcb28LcvxeOSTRT64+R706gAogyyLXyPhHiHx7a/vCv52+AiFwgi+W0e3TFS1D89romVzKKkMlUqZK+VKx4bvW277SvqwErau9r3vtrhWqhY/+c427PoaWsF6SKSWdyRwwT1OMvxGGYYefeh8XltI5Hpj2X0slfDhPnTLBMtcdmw+ry35YcLtK+nDStiSuF7eVrPhY+nn8AIV+goLLyYykEhD0ICg3pHADom9T38mmJ4+AcDp0zPRa/2Z9hTCqVvRtobrRo/TqRQN1yWdWvwN0TQNXdcXvb7c+5fbvpI+rJQtievSthIJlb07M2ye2kSQKLbzVkmBOgZKDnwTvPMEfntsIpgnqeVzXT81/zg+k+C6mWH1mbkFbd3acX3yK/Daj8rBC792ef3tAYKgzrd2b2X97Rt4861p9u1/A03TmCpV+fyjWRTbdsjnNQqFETRNQxBWk1f/6vD6v9cyNDROf7bEy3/6L636SX7zh+MMj97Ops0fYtbawmv/NFHqjkOlUm7PTXRdoiesKtsfeox6w8TzfBpuk61b1tGXSnDXHQFz81Ualkl57iIf3jKOYtu1aBLeORcRhNVguJDiu18q0p9N8MD9d7Jl7Umeef4oH7+7nwc+qlExa3x/3yNklTMkx8fGmZm9gKr2LTnhFoSV5ODBl3jw3izfe/o+/JbBgV94TJ/O86tDGk89OkmzUaY1/yKvHlZRwuLxUrVBQVhpfv/3Dez5gc+xY4ewzbPoNZcAjzlrCLP6JtMnT7B3v8JscwfJ0kSJf506JVETYkEm3YfvT/DcQZ0vPjbD7sdz7CYATnHspMmPX1nHuvFR7to0RdKoVqKBYU1OEFYTRVHI53I8//MG58oOqqrg+wGjxQE2vCeLqioY1QrJcNpQKIxw8UJVIifEgiDw+OMvn+TIG2Vmy1DMN5kc/B37XhoA2n0iybDaYBh61yqIIKwmqtrH1/Yd4PH7G9wzBufn4YVXkjQ9hb4k2HaN5OTURmZmL+B5TSmVCbGhL6ny9ux6vvlik5bnk1QVTNtgarL9+uTUxu45r5TKhHidfRUG+tPRc89feGxUK+1Smar2AciZV4g1YX6qah9GzUIpDhej3ks58wpxJp1KRU1kxeEiStjPK4sUQi8Q9RQbJoqEQ+hVlLCfVxB650KuDy2fW+jnBaSfV4g1YX7m8xq27Sz08wLSzyvEmjA/K5UydcdZ6OftLEUIQhzpzE/brqGEmgJhKUIQ4kpnfo6PjXcvUghCr1ywGTULpTRRkhqv0FN4XpPSRAnFqFbQsm3pHennFeJMmJ9aNrfQ26CkMhQKIxIdIfYUCiMoqUx72pAfzEalMunnFeJMmJ+VSpn8YHbhBkzfrUt0hNgT5ml0wQaXxNMEIeaEeRpdsIXlB0GIO2GeRjdgdgrtfeFTOwIJkRBHDh89GvWeGzVrsW7DD3/2W4mSEEu2broNWKjzJsM6r26ZYR0tIWES4kh/JhtAR503mUpjXlKtllKZEGfC/DTrDZKpNMnOfl5dN4mHgLEgLEbTtGgxraufV/R5hbij6zq+W1/czyv6vELcabhuVOft6ueVW9+FuBPe+g4d/bxh+UEQ4k6Yp13Lw4LQS3QtD4P08wrxpjM/o35eQPp5hZ4gzFOjZi1UG0SfV4g7Tt3CMPSFasPk1MZoIiylMiHONFw3umCbnNrYPeeVUpkQZzrzU/R5hZ4784Lo8wo9euYVfV6hZxF9XuGWQPR5hZ5D9HmFnkP0eYWeRfR5hZ5F9HmFnkX0eYVb4oJN9HmFnkT0eYWeQ/R5hZ5G9HmFnkT0eYWeRvR5hZ5F9HmFnuWy+rz33j0ZACRV9aY5oCSW2Lfqt/977UY3P/BWNCihT9dr1/N9qoZFparz3Ofex54DJ1i7poiW68cPgmuO643y73K0vIV9x/H41yyjS593UZ03qao31fHlj7qy6om7bGCvkCAIcOou5y7qfHXnBO9f4/Dpj5U4d7GK02gSBMGq+ncl9MLxj22dd6UT90bSbHqUKzU+sjnLwx9o4lbLPDzVxx2jaeaqNVqeL7/713H8F9V546DP6wde9NerXx4/CDDtOs2mw7OfHcVzdPyWS70yx57tt2FbNk7dxQ+C2H65V+WMexXH/536vFE/b6EwsmL9vJ1Oxilhr8uXIMBttfjGU3cyWugnOThKZmQdmcIwY8UBdu14L82mB9eQvDfEv5ieXa/mM4X6vGE/bzLs59WyOXRdZzCbf1dOD67Xn0QiQbY/zbM/Pcsz+xt4HVMEVVXIDaQZKQySSCRuiXitRrxDfV7dMhkpaiShveRWqZTpz2TZ/uA25ufmqTdcfK9BKpNhzegY4Y2aWj6HbTvUHQfbrjE+No5RsyhNlDCqFcJFj+Jw8arHtPwma0bHxL7YX9L+oT//Bd0yo1aGxM4nHgoAxsZGsUwT03IAoiXjzvraUt1n4fbwok9JZaKx1zImdEzsi/13jlm3dpxsLsf58xfbc/ShoQGqVZvp6RPLFoU9r9nlRKeBsO6mW2bkTGdJ42rHLBc0sS/2z5w9E+1raGiAZKsZcPjIEaC7U73huqRTqUX/23MPE7fRompUusaEpYzwqvBaxoh9sX85++1bgf7Dtk/cx/8A/EcyrqMdMKAAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/reaper_expanded_RS3.data.png": +/*!**************************************************!*\ + !*** ./images/data/reaper_expanded_RS3.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAe825vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz2Q1aAAABhW5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKojDQ0AAA0Ybm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD51ntaAAAABm5vUEUAAAAAAADsa7vYAAAACW5vUEUAAAAAAAAAAAChinLVAAAAB25vUEUAAAAAAAAAWube0AAAD3VJREFUeNrtXWuobddV/tZ8rLX24+xzzj335t7cpOmNaaJN0+ZVaDWlthCQVi0EFdGCSpUo4o/+0BZ/GPwjAR8IovUFPgoiKiI1UBVsNRSLcCmWliS2GtMm5nlfZ5+z99prPpc/5hpzz71z06Zau/e9zA8u+9y11nyNMdZcY4455hjFBz74cHf5wktgnAMAOBcgOGeRwjsHWVYAAKNV/Dv9P/06Z9F1HkKUAABrNTrfrTyT/gJYqZv+n9ZD/eFcwDkL7xwY5/H/1HejFRjnK/fT8VSDAdRiEcdEz6T9IXqk46Y20v6l46W+Ufn1OtO6v1Z767RepzH1Ix0zje9a5V8zO8ZHPniAe+56B6aHQ4Dt4DXhj1Ho8xD/+aUn8d9feRqMMTDOYY2B9w67+wdQbQtrNIQs4b0DY4HAWrUAACElyqpC2zSw1qCsajDGYY0GANTDIaxZElCrNrZDxAz1lPGekOVKmwAwGI4wPz4CgBUmW2MgpIR3DkKWyXUNxjnKqoJWKvbJe4+yquNz7WIOxni8RmNc7//6c1R/2v+qrnE8PVzpD9UjZAkhBbRSK/1mjEdapvQnujaz2VXpxThfKZvyS6v2muQfug533/EDmB9NgWIfXxNFha44AQYAZVX3jK1QVjWEkJheuQQhxQoTtArEGI7HkRjNbAZrDerBKBIlCkfTROICwHA8joRnjMN7D+99JKS1Blq1URi8C20cTw8jkegalWGM90zXPdEEvPewxqwIrpAlhuNxL8ShP2VV92N34bpz8N71wlbGvgshsbO7t1J22YdAn0UzD3X1ghuEyCeMsrDGREElIWOMrdCfMdYLpgq8kGUsFwTCw7vQX+p/yq9rlX/OGsynL8G2lwA/BdyF8M8fA50Ov/HaFOgWKN72zvd0Lzz31cjgqg6zS1XXUO1yMHTdOgdnDHb3DzCfzWCNivea+QxVPQLnBWz/Vrqe8FVdx2sFGDgvVuoDACkl/FoZ6gP9XdU1nOvAefGqe0JWsEatMID6lj7rXIcOHoLzV9XBpYztr4NLGcsIWcUxUP1cyjhmapfupf1Ix5XWuV4mpVtap3UOop/B1vufjvta4l9zfIxf/WmLu779TnTFidAOKwF+GmBjwM8A9zI6H17EoruM4s63v6t76fln4Z3DaGeC559+qkBGxobwL3847j721xqPf6HEUGo8+uH7ce6W2/DEl/4dj3zsSRhb4D33GDz80CioDTR1p29+RsYm8MnPNnjs/D5anMQri5P4xD+/ANt+GY99+kn44a1YFAd47Pw+Hv/cURBeUp4zMjaN7/2+HwTvGjhnYbXGvW89C1kWeMu3dbBGw2iFinu8896zYEIIaNWurMIzMjaFg/0Sf/TIGdx3+wg/8yN34603fhm/+Bufx3ffN8BD39XhO992I/7yd38YI/YchLU2rrgzMjaNj3/8z/D+B0b4tQ+/G94e4ff+wuHxL1Z402dO4CcfugNGXYS9/Cf45L8yRIs2Y3xldZqRsQn8wT++EX/72RfxCz/6GZy7+QDTY41RLXBpvofZ4RN45rnL+PU/t2ir+1Hc+8CD3XNfeRpatTh5+gz+64l/y9aGjI3hzLnbO6MNbDvFoz81w1tuG8d7Tzw9w0d/f4BydAK33PomCKVaCCkA1Hnmzdg4rLEoigIoJB754yEuX56hYAUKFNjfH2EwGoKVEkq1QW2wxkKrNpvKMrYC3juUJcfn/uYncP6LF/HiReDExOCOnb/H+z/SwprgQyGqqo7Whiy8GVshuFUFrYCf/6XfwY99j8U7TgMvXwZ+++8qWOzBqhZVVYeZl/b2MzI2DXJIKqsan3riJvzD5zXq4QhtM8f+wSl4f2npX6JUCyFkcG5x2VyWsVm0TRNNt0ZrjCd7WMznkGUNj+CVJkTQeVlV1dFTyOVdtoyNqw0+eAb2E6lqg/edVi2cMUtXhqoOMy/5hmadN2PzakMNayzq4RBlVaNdzHvXUImqrnu/YR5m3kyujG1CVdewRqNtGggpUA9GKKvqqs+y0XgCrVrs7O5lO2/GxrFo5sGB3hrMjqb9IQOLsqqg2iCnWrUYjSfLkxSLZh6dqTMyNoVwQsP1M27dH0XSmB1NwaWMJ1aCtaFtYqHxeJKpl7FxpO65Wql4TGk8nsQjRKptwswbzn05zGezTLmMjYLO9lV1Hc/KkUFhPpv1ZwyDPxmz1vanVPmrzn9lZGzC2kBqLB0Y3dnd6zfSVHJo1AZndNHrutlUlrF5lUFH1SBoBSWmVy6hHoyifAopIYQIzuhLPSJbGzI2CzpKH+Jk8GjXTeWTMR5m3lAgbwtnbI/aYI1Gu5jHmXbv5KkVGY2+DUKIZIquMvUyNr5gA4DxZBfH00OUVY3Z9LAP5rKUTyFEWLDp3iE9DaKRkbEpjHYmMVoP+Tl478F50YfNamGtDf68QkhYY7POm7EVasP8+KgPJeXQzGY4efoMVNv2sdcshJCJYw4Puxp5hy1j06jqGqOdSVQdvHdo5rO4A+x9iCy5dInsV3PZJTJj0zieHkYNoG0a7O4foG0a+CQmGmOJSyT5S+7uH2TqZWxcbSCLAuMci2Ye7+3uH8QdOKXaoPPSFly7mOO9P/TjXSZhxjbiq09+IcpqVdUQztkY61W1Lf7pr/40UyljK3HTbW+OdmDnLB3A9LBGk1E428sythUdRbgHQF5l2bch49qwRKTyygBAViGEvXNZ3c3YXpB8krwyzgVUs4g7GBkZ2wrOC3jvoZoFOBdB511Po5SRsa1IsxEJpdq4d5y3hzO2GSGGQ1isKdUuvcpE3hrOuAZAciqECDpvmi8sI2PbEdZnvc6b81FkXDs6bzhhEWbfmK3RZTtvxtaDUukKWQY7787uHoTIOm/GNaDz9ql0AYDNZ0cxxE5GxvYv2Eosmjnms6PezstC9susNmRsM9bzSLOqD+Sb+k1mZGwrFs08rM+iM3ofyDdHRs/YZpB8eueW8XmFLMPR4rxNnLHN+i7n/RH4cqk2WKMhZJm9yjK2Gs51IXav0aunhwHkQHsZ26029PK5cnqYopRka0PGtWBt0H0eNiZkGU1l2assY5uh2jbG7RWyBKPDl4tmnmfejK2feSmsvzU66LwAVmKiZmRsK2K4U9WC7R+cioH2MjK2HRRob//gFNiVSxdCsramyZsUGdttbXAupne9cunCahLBvEmRsdWz7pp8RlMZ4xyyzMGlM7YXsqzAOF+ayoDlSYrZ0TRTKGNrQfK5TCLYn6LI1oaMa8XaQFEiGRAyDmZ/3oxtB8koZcgUQogYIdI5mymUsbVo5rM+iXa9zMNmjQYATPb2cOLGWzprDISUsMZE/YI8z9Z/vXfwLgQCTp+P5o3+OfKfEFJGtzZql/6uh0M0SQpZxhiELNEu5qgHo5U2KaUnRVDRqo3n8MjRiIKp0I6M9x6MsXgNQKyL6ibQuOrhELOjaWzfe4/heAytVCxH9WnVQpYl9KIB93P85s/eiZ/7rafAqhFEWaGqa2iloFUb2y+rKtZP9CI6lFWYaebHR2CcR9UupTl9OYlf67/XE/+GozEuX3gl9MtaOknhk86aUCHjYIzFDQzqIOWvoLCoQQfxUZEOKebDoNYdfpYC42NdqcDMjqbw3i0V8sQ0EjLALNMOhFOkbOmLLGSsyzsXLSgxoiDny+eTnF6kQxGDKA9zOFHtYc3q16isasyOpnFsADAcj0OM47KCbhdomxl+5eFzuOeGFh967xugF3NYrdD2p1VIULVqwbmIviVEN2tsPGQ4vXIJo51J8qK4yNSr8et65t9yYvGvtjbQmzXamazMRFqpGGZd9ycvyqqODC+TvBZEiHR2IYcfIsZwPI6EJ4aQgxC9ofRMyuyyP7JEQkcDCgzxcRaguuIJkSQlqPcutqFV2+e3NXGmCJ+lqiemhFYt6sGoF4Ky17XkCiO1UglTFR68f4Lvv9tAH17EB75D4q6bB/DWAEWxMtsLIaHaNvqWCFlitDOBkAKqbdEu5vEZEpYwq5ZRUNf5db3z76rWhlTqqbPpW1RWFawxGE92ceLUDcknQy7zuEkeiVJWNbjk8S0N12Vfj0U9HEJIiXo4jLMKDS4QWUWhCp5EDGVVxQEJKWM5EryUwNQPGjQxn8rUw2FM0lwmtm6aDalfKSiRM9UrpIhlvQuJnUfC4NEP3QC3mMJbjfbKJXz0fTdDdC28dfDW9kIn4gxEzCRBodmevKfSr6LoM+LQ53SdX9cz/0i4ydrAz91x1y+//MKzYJyjKBhUu0DX+f7tNTC615GsgfcesiwxvXIZXdehYAXKqkJRhM9T0W/YWaNhrYHVvQ5VAM5aVINBZAx9QroudHgwCrNb0X/yVLsIyeQWDbx36LoOWikMRiMYreGcQ8EKcCFhtMZgNIL3HgUr4KyNguichSyr2F6qIoTPUgh3xYVAUTBQmgNrDBjn4ELAGg1ZVuFva9B1HoxztIsGzllwLuC7DvAOjz78Rtx3+wCFkNB+Am2G2N0b4/TJCc4/s4C1pq8z0PPUmbM4nh6iGtT9LN6i60IOMto0Ivp0XRfLCSlRFCz2h/jlnLtu+ceFgNFhzXD2DbeiuPPt7+peePYZCFlisreHV158fkX/oAUJvXVaqfj2pAsfimRCbxC9IeniAQAG4xHmR0cYT3ZDuaaJn4ygO1JGThkXTEQw+pSliwh6260xcSG1fM5EvYqu0SIhXQikC42Tp8/glRefj6rC+gKPXgCqO+rTBYPWLaxqYbRC13kURYGu6yCEBOMCKArsnTydqBkuqiXpl+Fq7RAdaHYl+tJCh/hFqsb1yL+Tp8/g6PAQ1micvaUX3ldefL7/xFTY3duH6TtaD0ZxpZj+yl6J5qKPqG41jDEY70wwOz6KZZ3V4KKM90n3Wf8/1WmMib+prkTPSynBxXL1SvWn5eNWYv9s2pazOt5f7/t6X9bLUpvpM1TPOo3SRQnRhOpM76VlqG/rNKB2Xosn6/SiPl+P/Lt88eVo5bnhxptQ3PvAg90z//HUitnkW2FSSt+4dWWeZohvpkmJZpB0Zktn1nS1nc5ar9eElM5YmzQBrv9ej/yzRuPW298cFmypCeNbYlIiover3rBy1pExlDT5m2FSCouPKlmdi2gOKqsa9XAYFxCpGShdeVN/aSxLm6eI92nF/PVMSLSg+f8yAV7P/IsThzVQqkXx7vc91F28cOF173IIIULG7T4otbX2dZd5LTirMRxN0DQzcC5es460vaqq447g7Hi68rkGEBdS3yi+Xl//r2W/Ufr9b8dxvfPv5KlT+B8FiFlLoxQJ6gAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./images/data/slayer_collapsed_OSL.data.png": +/*!***************************************************!*\ + !*** ./images/data/slayer_collapsed_OSL.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAXWm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALW4o8EAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAFNklEQVRYw92YaWxUVRTHf/OWWTqvM53ptNOBVpaCLAo0ERqQILhEwEACiYnBxIiJ3wgJGhPBKAlI+KhGTEAxhEQxBgyRoAgRiQGRpUqlu0AFStuhU2Z5s79Z+vxQZugaKmAy8P/y3jvvnXvOefeee+75G95Zt0bnNmzFVgDCkRiVVZWEQ0HCkRgAmb40mbSOVVEA0LQYqWQSQTRhNhlxljpRw1EA7DaFeDxBMpEgHo9Q4a7Ij3np79b8s63Yelf5UB+0ZBaDKBGJxglHVDJaCoMg033zFlbXBHbu+JgPt24j/s8pDNs3r9PPna/D4XDRl0qixqKIokw2m8ZuVRCMZoLBW4wVY9XNfTeafKRxNC2NPxil0+tHNlupnjABk6WYxpYG5tUuYPsnOzn63ddcvFhPV90xpNzfDofVvDGbzX4n0KQ2aiAj/ZDcGGosCrHoqLo2m33EwHPygT4ICY1EMsX1zl6cpR72ffEWU8ZPxVxWzrnG65w9W8ezy1Zw+pej1J35Df3aCZp6+jC8u+F1va2tFYCOjq68EYu5f4kmkrG8TEul8vcmoxEtlcJkNA5z0G63o6rqsPejfT+aPOdDNB4hqCaYNH0uX21ZiS/pos+gIFiK0JH4fPceMqIZxSLS097A4RN/8PySWiS7TRm0ROpbugzcN7p40LAVK/qO91dz02+hs9eLL55ikseBWTbx2urn+PbgT5T4G6iZOZ2sfxxZSUSKxxPYbPb+paRG/xfHHgRWL1vM+ZMX2Hu8mWgoxIGt6/CKBjZs20VbUyNvrFqEUL2UL4+dprxPoPFiK0IykSAYvNW/vlWVQoXHU05LRy+vrnyRRXOfoLvIxfotu2mq/5P5s6s519iOzaLw9DSZqGxnzoyJCPF4JL8BDMypQoOvN0A4koJwF97OaxRJEgFfd38SdHrp9oUoLy3hmyNt1Hpg9iQnUoW7gi6vD1GUR0zqQsHVbj+GTAyj1ku7P8OVlhbefGUFlzv9VI1zsvSF5eza9SmlLgWpahYNfzUg5ArkSDWnkNDc3MINX4RzV25iFGBxzWwqyxWWL5yKQ0ixcdNGjLrORx+sp0RP0VzfhFBZVcnDAKtZwl1ShNcX4dq166x9bxsRNcrPh37g/JlTvL12Ga4KDwcPH0HMenl5dTVSOBQcVlcKES5HMVdvdPPkzCm0Xu7gQksbF5ovoWNgxZIadnx2kJpF81k4y0Nx1UQeaz99Z1k6HK6CnjmzScbjstF2pQPJaMLuLEPLZFEjMQ4cOc3kp+awakElPREre/d8z6Z97Ui53TIcVgedRgoNBoMBi9lEpdtJQkuRTmeZ6ClFEAwktDTHfv2dH4+fpFgpwm63MrdmKtLj02bQ5fWRzaYLuhT0BwiyLCLLFnRdB/oPUzZFx2lX8If8VE8ejyyJ1NbOG5xzhVwKRprJgfcmo0Sx1YLZJAMQUYP9OSeK8rCD8cOInP+iKBOOxBCcpc58//QwzdxIMBmN+SbAWepEyPVzhV7Ex4p8PxmOIvAIQ8j1c48SRFHGblOQAv5AvrW3mK1s37xOD/gDJLUUfVkNo9lMeZl7TOTPQDJnrITRUAKovMzNvdrfv/9QnqoI+AMY1q55SQdwu8uIRaNEYwmAYfzG3Qgdu7WfFRtICt2LTu6kdC/2bQ4HVkWhp6cXAKmkpIhQKE6ORxlNeeDAAx3I7bRqLJp3dmhy/xed0YIay1jqbULK4XBRUlKElEnrnK+rG1bEc6TN0GuOjkhpGULh4CCdoaTSvejcj/07te4qzy15hn8B0nEpIgoaSy8AAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/slayer_collapsed_RS3.data.png": +/*!***************************************************!*\ + !*** ./images/data/slayer_collapsed_RS3.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAYyG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgO3bMAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAGeklEQVRYw9WYXWwcVxXHf3PnzsfOfnhjr22SNMjOR1OC6gRIS2gJX6ooRS7qAwIET0gRL6gSj+UBoZaKB4RQhVQRRKmQqBACVPEApUiABDSQNECCE7upiI1J7Nhexx+7O7s7H3dmeJid8W4lJHhbjrS6c/fee2bOOX/dc85f+8TnvpBsb64jdB0AXZdkEkWKfomjCMO0AAgDP3/un2djFCmSJEZKEwClApI4GdjTPwIDurN5v54oUsRxTBxFdNsuge+hCQ2h6WzV15iaPsx3n3+Orz3zLJ2lPyJvvrnAyvIiQgiErqPCkDiOGNk3hu95qDBAGiZxHCFE6oDA9wCQhoFpWXidDkqFmJaNEDoqDACwHQcV7jko8L38PZmzUj1mviYNc+CdAAWnSLvV7BkWEnQ7jI5VuXd6CrtQ4drCHO898xBff+47vPqzl7ALBludEAlgWjaB72E7Tv5xjZ0tSpWR1OthgND1/AOcUgm32UAIm47rEscRdqGI121jF4q5MV6nM+AYp1Qi8P3cSSoM873SMAh8jziOMS0by7Zpt5pIw6TV2IUkQQU+J45N842vnuPowWPY4xNcuvYvLl68zIc/NsuF377K5T+/RrL8Oy7fCpBSpjAUQqBChWXb+c/3PHRd5nMAFUVEYcjbD99L23UH1qQhsewiuq6helGJegZYto2KIky7gIZA17UBfQCVkSpx35nR8Ql8z8MwTUKvw8mZ+3np6Vnq3ghrOx2EV2eyWmb99jI/fPEFSgWdsLnGy39pcXD6KNqJ0+9P1ldvEUcRxXKF1cU3NIZQTKuQXH7lm3jNAiub29Q7AdP792EbFgiNH7/8K8aCOaYO3Mcvfn+F1+/KFJYZTLIIDKN85vGP8Pof/sYPfjOPu7vLT5/5Imu6xpeePc+N69f4/BNnEUce5YVfX2Ai0fEbdxHZ4X78D6McODDBwq1NPvv4Rzl7+p3ccWo8+fT3uH7lr5yZOcKla4tUCiUeOm7gGiOcPX0cIaUk8D1Myx5q4zY2t2m2AmiusrayjCMl2/U7AKyurHGnvsvEWJUfvXKDB/fDzPQoUimFadn5tTussrSyhR63Mf1NFrcUNxcWOPfpWf6xssWhA6M8+shjnD//bcZqJeSh+5m7OrcHSyF0fM8bWuPmFt7gdr3FpZvrmAI+eGqGeyZKPPbwMfaJgKe+/BRmkvCtrzxJNQmYv3Id7V0PP5LcXl4k8D1qk29jaf7KcN6WTil54MRhlv65TJQITr7jCB//wLu5eulPuN0On/rkLBcX6rSbG9xXS6i762kq2L67kee4YU0FlbHJJA4DzsxMcePmbbp+FxJBgsbsh06x9PdFTp09wwNHTcqHpogXL6SwVKHKS6phFadUBl3y2tUlNMOiXB2nG0bsNFx+8ssLHH7PSZ543z1stIq8+P2fc+75+RSWi2/OY1o2lWp1aGFZOzidZAV46PsITUMTAmkYtFtNiGMKtkEQKGJNMH3sRBq5OI7yYndYJa07I6Q0MUwLyykSJwlCN6jWJrCKJcq1/chCEWmY2E4R6fseUhppRxANdzpQYUh5pJgbaxeKaWC6AaCh6TIt1EWE73sIy7IRuo4Qel6wDqOk7VVazHvdNtIwcrRJw8yLdCF0hK5jWTbC9z2ESNuZYa4tAz/tLVUYYBeKeT28l6cFlm332jI9jRz/J5JCMO6DaNrQmlbavfev5QYXSxUC36M8Uh3qCiVrqnPKo2dMlsakYeB7qR2B71EsVdLImZZNt9NGN4zhvy0NE2nIvHPPpOAU0Q2DbqedO0G23eaeAq/L8VMPJmHvYumnDvpHo+cEvUf+RCogDENK5Qpuq5mfjVSALs18PaMg3jrPdIZhmI+Zjv79hmGgSxOv22a0Npnrz843dndyW9puE2lZdo7fwPfZuLNKHMcIIXI+o7m72+NBdvO9e/CIiKMI23Gor61iF4qoMCCO4wHOJPsv42tMy2Z3eyvvI/s7E9OyCHyfwF/No2BaFm6zkRu8vVnHdhw6rptzLv3vym9LpfZSQJoWxAD7lHUNGSxSjEviOMpJnX6WK/tYt9kYgI5TKqHCALPn0DiKeoyZyK/1OIrwOp2ByAV+yuUIoadcTG+vChXlkSoAjZ2tvctGhfi+h6yNj/9v+UZKlFJkxJJS6r8+858kUgFOsUKn4w7wpm/VMTY+iVKKkX1jWJad86puq8HE/oOD5dr4OP8GnWaF+iWIoRwAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/slayer_expanded_OSL.data.png": +/*!**************************************************!*\ + !*** ./images/data/slayer_expanded_OSL.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAafG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejEs8AAABhW5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKojDQ0AAA0Ybm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD51ntaAAAABm5vUEUAAAAAAADsa7vYAAAACW5vUEUAAAAAAAAAAAChinLVAAAAB25vUEUAAAAAAAAAWube0AAACUVJREFUeNrtnX2MHHUZxz87O/t2u7dzu/fe7im0tKUIpWptKoggGilSEpqYGDDGEkn8oyFBMREMakDA/9SICUUMwSjEBEM0CEJEYsAKbZVCX0/oQWnveu3dbXdn9n12Z8c/tjO3x93VXgt7s+X5JJe7m5vfPL995tnZZ57fM9/zfW/rzTaniHdGATByBVJDKYxsBiNXAKBWr1Kr2kRjMQAqlQJmuYziDxEOBUl2J9GNPABaPEaxWKJcKlEs5hjoH3CP+dZ/D7q/xzuj/3d7K+fwYdoSv56ZrXiXxvETaXL5IorPR6VSoVIxOfTOEboGV/DwQz/nJ/fdT/GdV/A9+KOt9o6du0gkeqibZfRCHr8/gGVV0aIxlGCYTGaKM+VMxzr7zbe9lXNoha2F7vtR9GulUiWdyTM6niYYibLsYx8n3BFn7/49rFu/gQd/8TDP//H3vPnmbsZ2vYDqvKMMQ3dfdDyuTQdyuTKvsbkC3jmGXshDIT/v2Hhcm/PFONtbOYdW2BK/zm+rq6ubvGEwfHSMZPcSnvj1d7ho6QrCvX3s2Pser722iy9s3MT2vz/Prlf/iX34JfadqOP7/h3ftIeHDwJw5MiYe8BIuJFClMqF6XeGabo/h4JBKqZJKBicNRlN09B1fdbf59t/vu2tnEOrbIlfZ9sqlSsUSjUuvHgdv7v3RibKPdR9MZRIBzYqjzz6GDV/mFjEz4mRPTzz0r/54jXrUbV4bMZHze4DYz7OmTEWn7Hz0Nb569d4Z8x+6J7NHE9HGJ0cZ6JocuFggnAgxDc2X8sfnv4rXek9rL3kYqz0EizVj1oslojHtcbHgZ73iIOEjxqbN17Nzpdf5/EX95PPZnnqvq2M+33ccf82hvft5dabrkJZfh2/eWE7fXWFvW8eRCmXSmQyU43cRNfFi8KiMDjYx4Ejk9xy45e5at0nONbRw+33Psq+3f9hw5rl7Ng7QjwS44pVAfIBjctXX4BSLObcJLw5FxGEVjIxeRIjZ4IxxvjoYTpUlZMTxxqJyug4xyay9HV38eRzw6wfhDUXJlEH+gcYG5/A7w/MmXALQit491gaX61AsDLJSLrGoQMHuO1rm3h7NM3QkiTXfel6tm37Jd09MdShy9jzxh4Up3g8V21QEFrF/v0HODqRY8eh4wQVuHrtGlJ9Ma6/cgUJxeSuu+8iaNv87Ie302Wb7N+9DyU1lBLPCYtONKzS39XB+ESOw4ffY8sP7ien5/nbn//Czldf4btbNtIzMMjTzzyH3xrnq5uXoxrZjHsApyYnCK2mJ9HJu0ePceklF3Hw7SO8fmCY1/e/hY2PTdes5aFfPc3aqzZw5WWDdA5dwMdGtk+nDYlEj3hQWDTCoQCDPXGGDx1BDYbQkr1UahZ6rsBTz21n2acv56bPpjiRi/L4Y3/i7idGUJ1qg2HoM1ZBBKGV+Hw+IuEQqf4kpYpJtWpxwWA3iuKjVKnywj/+xbMvvkxnrANNi7Ju7QrUlatWMzY+gWVVpVQmLHIAQyDgJxCIYNs20FjsjcdsklqMdDbN8mVLCah+1q//zMycV0plgpeuxM0/h4IqndEI4VAAgJyeaeS8fn9jg1x5BS/jxKffH8DIFVCS3Um391KuvIKXCQWDbhNZsjuJ4vTzyiKF0A64PcVGHkXcIbQritPPKwjtgt8fQIvHUJr7eTVNE88InsWJz3hco1gsTffzAtLPK3gaJz4zmSnKpdJ0P29zKUIQWk3NsqhZ1mn3aY7PYjGH4mgKOKUIQVgsVL//tH9vjs+B/oGZixSC4NXAff8Nm5ErNPp5pcYrtBOWVSU1lEIxshm0aEN6R/p5BS/jxKcWjWFkT/U2KMGw9PMKbUEi0YMSDDfShnhn1C2VST+v4GWc+Mxkpoh3RqefpKibZfGO4HmcOHVv2OCUeJogeBwnTt0bNqf8IAhex4lTI5tBdeq8Trns27fcYIuLBC+y84033N5zI1dATQ2leHtkxN3hkSefFS8JnuSTlywFpuu8qlPn1Qt5p47mEzcJXiQSjtrQVOdVgyHyp1SrpVQmeBknPvPlCmowJPq8QvugaZq7mDajn1f0eQWvo+s6dbM8u59X9HkFr1MxTbfOO6OfVx59F7yO8+g7NPXzOuUHQfA6TpzOWB4WhHZixvIwSD+v4G2a49Pt5wXR5xXaAydOjVxhutog+ryC1ymVCxiGPl1tWLlqtZsIS6lM8DIV03Rv2FauWj0z55VSmeBlmuPTzXlFn1dolysviD6v0KZXXtHnFdoW0ecVzgtEn1doO0SfV2g7RJ9XaFtEn1doW0SfV2hbRJ9XOC9u2ESfV2hLRJ9XaDtEn1doa0SfV2hLRJ9XaGtEn1doW0SfV2hbTqvPe8WnVtqwsP+LtVAU3xzH9tcb361Go1vdtlrqFGdO52rXqtfJGgUyWZ2f3nYxd247yGBfEi0WoW7bZ+3XD2p+p6P5P1B68fznCsYMfd5ZdV7V7/9QJz7/WVcWPXDndewZYts2pbLJ8Umde7YMsaavxNc/l+L4ZJZSpYpt24s6vzOhHc6/Z+u8rQ7cD5Jq1WIqk2PDpVE2XV7FzE6xaVWAZb0h0tkcNasun/vncP5n1Xm9oM9bty33q13fPHXbJl8sU62WeODWXqySTr1mUs6kuXPjUoqFIqWySd22PfvmXpQr7gLO//v1ed1+3kSip2X9vM2T9FLAntNcbBuzVuPH37qI3kQEtbOXcM8Swolu+pMdbL1hBdWqBWcRvB/I/Dx6dV3Ia3L0eZ1+XtXp59WiMXRdpzMa/0imB+c6H5/PRzQS4oHfjnL3wxWsphTB71eIdYToSXTi8/nOC38thr8dfV69kKcnqaFCY8ktk5kiEo6y8fprOZk+SbliUrcqBMNh+nr7cR7U1OIxisUS5VKJYjHHQP8ARq5AaiiFkc3gLHoku5MLHlOrV+nr7Rf7Yn9O+6+8/Cp6Ie+2Mvi23PwVG6C/v5dCPk++UAJwl4yb62tzdZ85252bPiUYdseezRhnYmJf7L9/zJLBAaKxGCdOTDZy9K6uDrLZIsPDB+ctCltWdcYkmg04dTe9kHcn01zSWOiY+Zwm9sX+0dGj7rG6ujpQa1Wbnbt2ATM71SumSSgYnPW9kXvkMSs1skZmxhinlOHcFZ7NGLEv9k9nv/Eo0Ltce83n+R+bCm28wSXdjwAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./images/data/slayer_expanded_RS3.data.png": +/*!**************************************************!*\ + !*** ./images/data/slayer_expanded_RS3.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAehm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYX5ysAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAQyklEQVR42u1da4wlx1X+uh7dfR9zZ2Zndvbh127sTWxjr53YRCaOQyxZBIMTBQmIBD8QIfIPIBL/CD9AJARZAgmiSBGOAhFIEUIyivIDQkA8xGPBD4Gdtb12FK8fa++ud2ZnZ+6de/t2V1dV86P61O17vSYOhJm7q/qk0b1zu7u66pzTp0+dOnVO9LGff7i6tPEmGOcAAM4FCMZoNGGNgYwTAECpCv+9+T99GqNRVRZCxAAArRUqW02d0/wEMNU2/d9sh/rDuYAxGtYYMM79/9T3UhVgnE8db44nabVQjMd+THROsz9Ej+a46R7N/jXHS32j62fbbLb9P91vltazNKZ+NMdM47vS+WetxXi0g1IpqCJHxCKwiOPSxgXccOQIvvylL+B3Pvd5ZC//K8RL3zmFN149DcYYGOfQZQlrDRaXV1DkOXSpIGQMaw0YcwRWRQ4AEFIiThLkWQatS8RJCsY4dKkAAGm7DV1OCKiK3N+HiOnaif0xIeOpewJAq93BaGcAAFNM1mUJISWsMRAybvyuwDhHnCRQReH7ZK1FnKT+vHw8AmPc/0ZjnO3/7HnUfrP/SZpip7891R9qR8gYQgqoopjqN2Pc07JJf6JrNhxell6M86lrm/xSRX7F8s8ag1LlyEc7WFldxrvfdRRpuoBnT53E++/5AB75wh/hW3/5NaQtic2shACAOEmhihxpu+0739/aRLe3OMUs6mC728Vw0AdjKbLhENYapK0O8vEIaaszEY4smyJcu9v1wkSdJwgpa8I7AUvSFKOdAYSMsdPfvixhSACoj0RwascJBffXCCmQZ5lnPjHLWuMZQczw2soaCCHRWehhtDPwxGeMTwmptQZxkvp7NYXS9U83hJZBFXl9f+bPT9ttp40YhyoK/7CoIoeQcqpda8zUwzThV3pF8k/lY6g8w203H8Pv/dYv4aZrjiHdv4Ynnn0Njz/+FO7/8Ydw4h++haf+499QvfqPeOqMQnT8ng9X515/zTeapI4gSZqiyHPfOfpdGwNTllhcXsFoOIQuC38sGw2RpB1wHkHXwmDqASZp6n+LwMB5NNUeAEgpYWeuoT7Q9yRNYUwFzqO3HBMygS6LqVcl9a15rjEVKlgIzt/SBpfS338WXEp/jZCJHwO1z6X0Y6b70rFmP5rjarY5e02Tbs02tTEQ9UM02//muK8U/kkpsX1xHbfffhxf++xPYj1fhY26YK02Kgh8+StfheYpui2OC6dP4ut/9ySuOXoTolvv/mD15tkzsMags9DD2dMvRAgI2EV0llYrnWd48q9/H/mghTc2LmE9Uzh6aBmpTAAW4S++/jdYUSdx5PDN+Kt/fhpPXhTObCDV3XzyAwJ2CyyK8ImH7seT//Jf+NO/fx7D7W089rlfwXke4dc+/yhefO5Z/OLH7wO78SP44789gbWKo+hfBGsazwEBewFrLQ4dXsOpMxv4uY/+GO67+4dwrr2KT3/2K3ju6f/EPcdvxBPPnkav1cUH3iMxlIu47+73gAkh/OQhIGAvoEuF9Y1LGOwoYHAW5994FW0hcGn9HADg7BvncW59G2srS/jzb76I9x8Cjh/dB6G1Rpyk3q0RELDrZgMXePnsJrgZIS42cHpT46VTp/CpTzyE776xiesO78NHHngQjz76RaysdiGuux0nnzk5MRsY41Oz04CA3ULSauOZk8/h9fUdPPHSm4gZ8KN3Hse1a108eO8xLDOFz/zGZxBXFf7gNz+NpUrh+aefQ/Teex+oXn/1NFSRY/XAQbz8/NPB2xCwq1g+cG2VDQe465Yb8Morr8FUDHfcciN+4kPvwzNP/DuG4ww/+9MP4fFT6xgNLuDm1Qrrwzedq+zSxQvQpUaSpsFVFrDr2Hfo+spoDVOMcc/xo3jxpTMYF2OgYqgQ4aEP34mXv30ad953D374phgL1x2BPX3CmQ261H7lJiBg170NxkDKGDLt4MS3XwZEjIXl/RiXBlv9IR775gm866478PEfuRYXdjr46p98A5/60vPObDj9necRJyl6S0vBbAjYdXT3rVVCuNVJRABnzAXmqKJehteIqgpJzKGUho0Yjh671S1SWGt8bEBAwK4Lb28ReZbBWot2t4tsOEScthCnbVhr0On1sLO1hYXFRfS3LsEag7TdASuKHEJIF9FkgrssYPdBgssYQ55ltevWQhU5Wu0O+pubEDJGxEUdYBWjKHKwJEl9lJUJq2wBewCK4nPRZhZCCh/lV+QuxFMVOUxZgjEOxjmSJHWal2JDQ2xDwF6BQkddWKlG2m4jTlLk4xHiJIWQEkma1mGd3GneQLaAufA4WAtrjQu9LFUdSyyQtjqIk+TyAt/p9qCKHAuLS2GFLWBPQMH2uiwxzkYuaF2XGA760KWCLjXiJEGROzlVRY5Ot+c0b5ykGGcjH0wdELDbaLU7botRvbPFady03oqkMBz0waXEOBv5IDJW5Fltc3B0u71AxYBdR7vbRX9rE1o7h0EzPFcVBbQukbY66HZ7Pva8yDOneYUUsNZgNBwGSgbsOrLh0Alnb9FvIE1St7+Q/lSRY1TvtxPS7ZBmWut6lyp/y/6vgIDd8jRMbNvUm7GqcLufFxaX6oU0t+KWDYfQWrtgdFHbusFVFrAnwss59u1fg5DC7XRmk+3xQsbob20ibXW8fAopIYRwmndiRwRvQ8BeaF6O9fNnfdIR+o1SMszKJ2PcaV4AYRdFwJ6CBHS0M/C5L/LxyGvapdX9UzJK35kQoqGik0DJgD2xeRljPp4BcME6O/1txEmKYX+7TvAykU9vNjgnsZhKohEQsJvQukS72wUAdBZ6yLOsVqguzsFaC86jOm1WDq01RJKkEEJClzrYvAF7Amtt7SZzKa5GOwO/XJwNh1g9cBBFnte51zSEkI3AHO5WNcIKW8BeYPXAQQwHfR8c1lnoedPBWoNsNPQrwNa6zJKTkMh6NhdCIgP2Auvnz4IxjsXlFez0t70FkGcZFpdXXLxvIycaY42QSIqXXFxeCZQM2IMJG0er20F/a3M63SznGGcjf97i8opfgSuK3Nm8tASXj0e4/2d+oQrkDJhHvHbqpJfVJEkhjNHQpUKcuBSU//TYnwUqBcwlrrnxFu8HNkbTBkwLXSpyCgd/WcC8oqIM9wAoqizENgTMP5qxDV54ZeI2wBkTzN2A+QXJJ8kr41ygyMZ+BSMgYF7BeQRrLYpsDM4pM/pMGaWAgHlFsxqRKIrcrx2H5eGAeYbL4eAma0WRT6LKRFgaDrgCQHIqhHA2L0lzQMCVADc/E5MiggEBV4bNyxEntc1LVRVpx2ZAwDyDSukKGTs/78LiEnx+1ICAebZ5hcTC4pLTwqPhwKfYCQiY/wlbjHE2wmg4mFTATNI0mA0Bc43ZOtIsqWuwNeMmAwLmFeNs5OZnPhi9TuQbMqMHzDNIPq0xk/y8QsZua3FYJg6YZ3uX83oLfDwxG3SpIGQcosoC5hrGVC53b6mmdw8DCIn2AubbbKjlc2r3MGUpCd6GgCvB26CK3GleIWPvKgtRZQHzjCLPfd5eIWMw2nw5zkZB8wbMvealtP66VM7mBTCVEzUgYF7h050WOdjyyn6faC8gYN5BifaWV/aDbW1uuGJtWRYWKQLm29tgjC/vurW5MV1EMCxSBMy11p2RT+8qY5xDxiG5dMD8QsYJGOcTVxkw2UkxHPQDhQLmFiSfkyKC9S6K4G0IuFK8DZQlkgGu4mCI5w2Yd5CMUoVMIYTwGSKN0YFCAXOLbDT0hQaFEBBauxSnANBbWsK+Q9dXuix9FW6yLyjybPbTWgNrXCLg5vnevVGfR/ETQkof1kb3pe9pu42sUUKWMQYhY+TjEdJWZ+qeVNKTMqioIvf78CjQiJKp0IqMtdZXnZlKYsy4b5tA40rbbQwHfX9/ay3a3S5UUfjrqD1V5JBxDDXOwO0If/jLt+JXv/gCWNKBiBMkaQpVFFBF7u8fJ4lvn+hFdIgTp2lGOwMwzr1p16Q5vTmJX7OfVxP/2p0uLm2su35pTTspbKOzpa++zRjzCxjUQapfQWlRnQ1ivSHtynC6Qc0G/EwExvq2mgIzHPRhrZkY5A3XiKsAMyk74HaRskksspC+LWuM96D4jIKcT85v1PQiG4oYRHWY3Y5qC11Ov43iJPX1EwjtbtflOI4TqHyMPBvidx8+gjvXcnzy/uugxiNoVSCvd6uQoKoiB+fCx5YQ3XSp/SbD/tYmOgu9xoNiPFMvx6+rmX8TxWLf6m2gJ6uz0JvSRKoofJp1Ve+8iJPUMzxu1LUgQjS1CwX8EDGoZJEuS88QChCiJ5TOaTI7rrcskdDRgBxDrNcC1JbfIdIoCWqt8fdQRV7Xty29pnCvpaQmpoQqcqStTi0EcW1rySlGqqJoMLXAA3f18NE7Sqjti/jYzRK3XduC1SUQRVPaXgiJIs99bImQMToLPQgpUOQ58vHIn0PC4rRq7AV1ll9XO/8u621oSj11tvkUxUkCXZbo9haxb/9a45UhJ3XcJPdEiZMUXHL/lLrfZd2ORtpuQ0iJtN32WoUG54hceKFykUQMcZL4AQkp/XUkeE0CUz9o0MR8uiZtt32R5rjh6yZtSP1qggo5U7tCCn+tNa6wc0eUeOSTazDjPqxWyLc28esPXgtR5bDawGpdC53wGoiYSYJC2p6ip5pvRVFXxKHX6Sy/rmb+kXCTt4Efefdtv33h3BkwzhFFDEU+RlXZ+uktUaraRtIlrLWQcYz+1iVUVYWIRYiTBFHkXk9RvWCnSwWtS2hV21ARYLRG0mp5xtArpKpch1sdp92i+pVX5GNXTG6cwVqDqqqgigKtTgelUjDGIGIRuJAolUKr04G1FhGLYLT2gmiMhowTf7+mieBeSy7dFRcCUcRAZQ50WYJxDi5cMWcZJ+67LlFVFoxz5OMMxmhXM7eqAGvwyMM34H3HWoiEhLI9qLKNxaUuDqz28NQrY2hd1m06eu4/eBg7/W0krdRXgKwqV4OMFo2IPlVV+euElIgi5vtD/DLGXLX840KgVG7OcPi6o4huvfuD1bkzr0DIGL2lJayfPztlf9CEhJ46VRT+6WlOfCiTCT1B9IQ0Jw8A0Op2MBoM0O0tuuuyzL8ynO1IFTmlnzARwehV1pxE0NOuy9JPpCbnld6uot9oktCcCDQnGqsHDmL9/FlvKsxO8OgBoLa9PR0xKJVDFzlKVaCqLKIoQlVVEEKCcQFEEZZWDzTMDOPNkuab4XL3ITqQdiX60kSH+EWmxtXIv9UDBzHY3oYuFQ5fXwvv+vmz9SsmweLSMsq6o2mr42eKzU9ZG9Fc1BnVtUJZlugu9DDcGfhrjVbgIvbHyfaZ/Z/aLMvSfzZtJTpfSgkuJrNXar95vV9KrM9t3sto5Y/P9n22L7PX0j2b51A7szRqTkqIJtRm81jzGurbLA3oPm/Hk1l6UZ+vRv5dunjBe3nWDl2D6L33PlC98t0Xptwmu+FSaj5xs8Y8aYgfpEuJNEhTszU1a3O23dRa79SF1NRYe+kCnP28GvmnS4Wjx25xE7amC2NXXEpE9HrW62bOyjOGiib/IFxKbvKRNGbnwruD4iRF2m77CUTTDdSceVN/aSwTn6fwx2nG/L1cSDSh+f9yAV7N/POKQ5coihzRhx78qerixsY7XuUQQriK23VSaq31O77m7WC0QrvTQ5YNwbl42zaa90uS1K8IDnf6U69rAH4i9f3ie/X1/3rt90u//+04rnb+re7fj/8GO6Pn3eR9G3UAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./modules/SearchAlgorithm.ts": +/*!************************************!*\ + !*** ./modules/SearchAlgorithm.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SearchAlgorithm: () => (/* binding */ SearchAlgorithm), +/* harmony export */ SearchData: () => (/* binding */ SearchData) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var SearchData = /** @class */ (function () { + function SearchData() { + this.reaper = false; + this.task = 'Dragons'; + this.probability = 0; + } + return SearchData; +}()); + +var SearchAlgorithm = /** @class */ (function () { + function SearchAlgorithm() { + this.data = new SearchData(); + } + // Lookup best possible assignment based on input string + SearchAlgorithm.prototype.lookup = function (lookup_1) { + return __awaiter(this, arguments, void 0, function (lookup, skipReaper) { + var probabilities, reapersResponse, reapers, _i, reapers_1, a, _a, _b, b, assignmentsResponse, assignments, _c, assignments_1, a, _d, _e, b, _f, _g, b, key, aliasKeys, _h, aliasKeys_1, aliasKey, creatureKeys, _j, creatureKeys_1, creatureKey; + if (skipReaper === void 0) { skipReaper = false; } + return __generator(this, function (_k) { + switch (_k.label) { + case 0: + probabilities = {}; + if (!!skipReaper) return [3 /*break*/, 3]; + return [4 /*yield*/, fetch("./data/reapers.json")]; + case 1: + reapersResponse = _k.sent(); + return [4 /*yield*/, reapersResponse.json()]; + case 2: + reapers = _k.sent(); + for (_i = 0, reapers_1 = reapers; _i < reapers_1.length; _i++) { + a = reapers_1[_i]; + probabilities[a["index"]] = { + reaper: true, + index: Math.round(this.similarity(a["index"], lookup) * 10000) / 100, + creatures: {} + }; + for (_a = 0, _b = a["creatures"]; _a < _b.length; _a++) { + b = _b[_a]; + probabilities[a["index"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175; + } + } + _k.label = 3; + case 3: return [4 /*yield*/, fetch("./data/assignments.json")]; + case 4: + assignmentsResponse = _k.sent(); + return [4 /*yield*/, assignmentsResponse.json()]; + case 5: + assignments = _k.sent(); + for (_c = 0, assignments_1 = assignments; _c < assignments_1.length; _c++) { + a = assignments_1[_c]; + probabilities[a["index"]] = { + reaper: false, + index: Math.round(this.similarity(a["index"], lookup) * 10000) / 125, + alias: {}, + creatures: {} + }; + for (_d = 0, _e = a["alias"]; _d < _e.length; _d++) { + b = _e[_d]; + probabilities[a["index"]].alias[b] = Math.round(this.similarity(b, lookup) * 10000) / 150; + } + for (_f = 0, _g = a["creatures"]; _f < _g.length; _f++) { + b = _g[_f]; + probabilities[a["index"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175; + } + } + // Find highest likelihood of the search + for (key in probabilities) { + if (probabilities[key].index > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].index; + } + if (probabilities[key].alias) { + aliasKeys = Object.keys(probabilities[key].alias); + for (_h = 0, aliasKeys_1 = aliasKeys; _h < aliasKeys_1.length; _h++) { + aliasKey = aliasKeys_1[_h]; + if (probabilities[key].alias[aliasKey] > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].alias[aliasKey]; + } + } + } + if (probabilities[key].creatures) { + creatureKeys = Object.keys(probabilities[key].creatures); + for (_j = 0, creatureKeys_1 = creatureKeys; _j < creatureKeys_1.length; _j++) { + creatureKey = creatureKeys_1[_j]; + if (probabilities[key].creatures[creatureKey] > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].creatures[creatureKey]; + } + } + } + } + return [2 /*return*/, this.data]; + } + }); + }); + }; + // Check the similarity of 2 strings + SearchAlgorithm.prototype.similarity = function (s1, s2) { + var longer = s1; + var shorter = s2; + if (s1.length < s2.length) { + longer = s2; + shorter = s1; + } + var longerLength = longer.length; + if (longerLength === 0) + return 1.0; + return (longerLength - this.editDistance(longer, shorter)) / parseFloat('' + longerLength); + }; + // Calculate the edit distance between 2 strings + SearchAlgorithm.prototype.editDistance = function (s1, s2) { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + var costs = []; + for (var i = 0; i <= s1.length; i++) { + var lastValue = i; + for (var j = 0; j <= s2.length; j++) { + if (i === 0) { + costs[j] = j; + } + else if (j > 0) { + var newValue = costs[j - 1]; + if (s1.charAt(i - 1) !== s2.charAt(j - 1)) { + newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; + } + costs[j - 1] = lastValue; + lastValue = newValue; + } + } + if (i > 0) { + costs[s2.length] = lastValue; + } + } + return costs[s2.length]; + }; + return SearchAlgorithm; +}()); + + + +/***/ }), + +/***/ "./modules/SlayerDialogReader.ts": +/*!***************************************!*\ + !*** ./modules/SlayerDialogReader.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SlayerDialogReader: () => (/* binding */ SlayerDialogReader) +/* harmony export */ }); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var alt1_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! alt1/dialog */ "../node_modules/alt1/dist/dialog/index.js"); +/* harmony import */ var alt1_dialog__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(alt1_dialog__WEBPACK_IMPORTED_MODULE_1__); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + +var SlayerData = /** @class */ (function () { + function SlayerData() { + this.selectYourOwn = false; + this.ticket = false; + this.reaper = false; + this.count = []; + this.task = []; + } + return SlayerData; +}()); +var SlayerDialogReader = /** @class */ (function () { + function SlayerDialogReader() { + } + SlayerDialogReader.prototype.read = function () { + return __awaiter(this, arguments, void 0, function (buffer) { + var data, box, msg, countText, e, countText, e, i, msg, countText; + if (buffer === void 0) { buffer = null; } + return __generator(this, function (_a) { + if (!buffer) { + buffer = alt1__WEBPACK_IMPORTED_MODULE_0__.captureHoldFullRs(); + } + if (!this.dialogReader) { + this.dialogReader = new (alt1_dialog__WEBPACK_IMPORTED_MODULE_1___default())(); + } + this.data = new SlayerData(); + data = this.dialogReader.find(buffer); + if (!data) + return [2 /*return*/, null]; + box = this.dialogReader.read(buffer); + if (!box) + return [2 /*return*/, null]; + if (box.text && (!box.opts || box.opts.length !== 2)) { + msg = box.text.toString(); + // Parsing logic for various types of dialogs + if (msg.toLowerCase().includes("select your own task")) { + this.data.selectYourOwn = true; + } + if (msg.toLowerCase().includes("require you to collect")) { + this.data.reaper = true; + countText = msg.substring(msg.indexOf("collect ") + 8, msg.indexOf(" souls")); + this.data.count[0] = parseInt(countText); + this.data.task[0] = msg.substring(msg.indexOf("battle: ") + 8, msg.indexOf(". Can")); + } + if (msg.toLowerCase().includes("new task is to kill")) { + e = msg.substring(msg.indexOf("kill ") + 5, msg.length - 1); + countText = e.substring(0, e.includes(",") ? e.indexOf(",") : e.indexOf(" ")); + this.data.count[0] = parseInt(countText); + this.data.task[0] = e.substring((e.includes(",") ? e.indexOf(",") : e.indexOf(" ")) + 1); + } + if (msg.toLowerCase().includes("still need to kill")) { + e = msg.substring(msg.indexOf("kill ") + 5); + this.data.count[0] = parseInt(e.substring(0, e.indexOf(" "))); + this.data.task[0] = e.substring(e.indexOf(" ") + 1, e.includes(".") ? e.indexOf(".") : e.length - 1); + } + if (msg.toLowerCase().includes("still hunting")) { + this.data.task[0] = msg.substring(msg.indexOf("hunting ") + 8, msg.indexOf(";")); + } + } + if (box.opts && box.opts.length === 2 && (box.title && box.title.toLowerCase().includes("change your assigned slayer task"))) { + this.data.ticket = true; + for (i = 0; i < box.opts.length; i++) { + msg = box.opts[i].text; + countText = msg.substring(0, msg.indexOf(' ')); + this.data.count[i] = parseInt(countText); + this.data.task[i] = msg.substring(msg.indexOf(' ') + 1, msg.includes('(') ? msg.indexOf('(') - 1 : msg.length); + } + } + return [2 /*return*/, this.data]; + }); + }); + }; + return SlayerDialogReader; +}()); + + + +/***/ }), + +/***/ "./modules/UICounterReader.ts": +/*!************************************!*\ + !*** ./modules/UICounterReader.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UICounterData: () => (/* binding */ UICounterData), +/* harmony export */ UICounterReader: () => (/* binding */ UICounterReader) +/* harmony export */ }); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var alt1_ocr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! alt1/ocr */ "../node_modules/alt1/dist/ocr/index.js"); +/* harmony import */ var alt1_ocr__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(alt1_ocr__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./modules/settings.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + +var imgs = alt1__WEBPACK_IMPORTED_MODULE_1__.webpackImages({ + slayer_expanded_RS3: __webpack_require__(/*! ../images/data/slayer_expanded_RS3.data.png */ "./images/data/slayer_expanded_RS3.data.png"), + slayer_expanded_OSL: __webpack_require__(/*! ../images/data/slayer_expanded_OSL.data.png */ "./images/data/slayer_expanded_OSL.data.png"), + reaper_expanded_RS3: __webpack_require__(/*! ../images/data/reaper_expanded_RS3.data.png */ "./images/data/reaper_expanded_RS3.data.png"), + reaper_expanded_OSL: __webpack_require__(/*! ../images/data/reaper_expanded_OSL.data.png */ "./images/data/reaper_expanded_OSL.data.png"), + slayer_collapsed_RS3: __webpack_require__(/*! ../images/data/slayer_collapsed_RS3.data.png */ "./images/data/slayer_collapsed_RS3.data.png"), + slayer_collapsed_OSL: __webpack_require__(/*! ../images/data/slayer_collapsed_OSL.data.png */ "./images/data/slayer_collapsed_OSL.data.png"), + reaper_collapsed_RS3: __webpack_require__(/*! ../images/data/reaper_collapsed_RS3.data.png */ "./images/data/reaper_collapsed_RS3.data.png"), + reaper_collapsed_OSL: __webpack_require__(/*! ../images/data/reaper_collapsed_OSL.data.png */ "./images/data/reaper_collapsed_OSL.data.png"), +}); +var UICounterData = /** @class */ (function () { + function UICounterData() { + } + return UICounterData; +}()); + +var UICounterReader = /** @class */ (function () { + function UICounterReader() { + this.countFont = null; + this.taskFont = null; + this.data = null; + } + UICounterReader.prototype.read = function (buffer) { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, width, height, _i, _c, match, countText; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + if (!buffer) + buffer = alt1__WEBPACK_IMPORTED_MODULE_1__.captureHoldFullRs(); + if (!!this.countFont) return [3 /*break*/, 2]; + _a = this; + return [4 /*yield*/, fetch(__webpack_require__(/*! ../fonts/aa_10px_mono.fontmeta.json */ "./fonts/aa_10px_mono.fontmeta.json")).then(function (r) { return r.json(); })]; + case 1: + _a.countFont = _d.sent(); + _d.label = 2; + case 2: + if (!!this.taskFont) return [3 /*break*/, 4]; + _b = this; + return [4 /*yield*/, fetch(__webpack_require__(/*! ../fonts/aa_8px_mono.fontmeta.json */ "./fonts/aa_8px_mono.fontmeta.json")).then(function (r) { return r.json(); })]; + case 3: + _b.taskFont = _d.sent(); + _d.label = 4; + case 4: + // Reset data for next search + this.pos = []; + this.data = null; + // Look for all UI Elements until we find one, then the rest will get skipped + this.findUIElement(buffer, imgs.slayer_collapsed_OSL, { reaper: false, collapsed: true, OS: true }); + this.findUIElement(buffer, imgs.slayer_expanded_OSL, { reaper: false, collapsed: false, OS: true }); + this.findUIElement(buffer, imgs.slayer_collapsed_RS3, { reaper: false, collapsed: true, OS: false }); + this.findUIElement(buffer, imgs.slayer_expanded_RS3, { reaper: false, collapsed: false, OS: false }); + this.findUIElement(buffer, imgs.reaper_collapsed_OSL, { reaper: true, collapsed: true, OS: true }); + this.findUIElement(buffer, imgs.reaper_expanded_OSL, { reaper: true, collapsed: false, OS: true }); + this.findUIElement(buffer, imgs.reaper_collapsed_RS3, { reaper: true, collapsed: true, OS: false }); + this.findUIElement(buffer, imgs.reaper_expanded_RS3, { reaper: true, collapsed: false, OS: false }); + // If we don't find any data or we found too many matches then return + if (!this.data && this.pos.length == 0) + return [2 /*return*/, null]; + width = this.data.collapsed ? imgs.slayer_collapsed_OSL.width : imgs.slayer_expanded_OSL.width; + height = this.data.collapsed ? imgs.slayer_collapsed_OSL.height : imgs.slayer_expanded_OSL.height; + // Loop the results and return the data we find + for (_i = 0, _c = this.pos; _i < _c.length; _i++) { + match = _c[_i]; + // Overlay a rectangle around the matched area on screen if we're running in alt1 + if (window.alt1 && alt1.permissionOverlay && _settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.counter) + alt1.overLayRect(alt1__WEBPACK_IMPORTED_MODULE_1__.mixColor(255, 255, 255), match.x, match.y, width, height, 500, 3); + // Get the pixel data for the matched area + this.data.img = buffer.toData(match.x, match.y, width, height); + countText = alt1_ocr__WEBPACK_IMPORTED_MODULE_2__.findReadLine(this.data.img, this.countFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], this.data.collapsed ? 10 : 72, 15, 30, 3); + this.data.count = parseInt(countText.text); + if (!this.data.collapsed) + this.data.task = alt1_ocr__WEBPACK_IMPORTED_MODULE_2__.findReadLine(this.data.img, this.taskFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], 9, 28, 156, 3).text; + } + return [2 /*return*/, (!this.pos || this.pos.length == 0) ? null : this.data]; + } + }); + }); + }; + UICounterReader.prototype.findUIElement = function (buffer, img, mode) { + if (!this.data && this.pos.length == 0) + this.pos = buffer.findSubimage(img); + if (!this.data && this.pos.length > 0) + this.data = { reaper: mode.reaper, collapsed: mode.collapsed, OS: mode.OS, img: null, count: -1, task: null }; + }; + return UICounterReader; +}()); + + + +/***/ }), + +/***/ "./modules/data/assignnments.ts": +/*!**************************************!*\ + !*** ./modules/data/assignnments.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get), +/* harmony export */ getIndexList: () => (/* binding */ getIndexList) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Fetch a single assignment based on the index or alias +function get(assignment) { + return __awaiter(this, void 0, void 0, function () { + var response, data, _i, data_1, a, _a, _b, b, error_1; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _c.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch("./data/assignments.json")]; + case 1: + response = _c.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _c.sent(); + for (_i = 0, data_1 = data; _i < data_1.length; _i++) { + a = data_1[_i]; + if (a["index"].toLowerCase() === assignment.toLowerCase()) { + return [2 /*return*/, a]; + } + for (_a = 0, _b = a["alias"]; _a < _b.length; _a++) { + b = _b[_a]; + if (b.toLowerCase() === assignment.toLowerCase()) { + return [2 /*return*/, a]; + } + } + } + return [2 /*return*/, null]; + case 3: + error_1 = _c.sent(); + console.error("Error fetching data:", error_1); + return [2 /*return*/, null]; + case 4: return [2 /*return*/]; + } + }); + }); +} +// Get an array of the index +function getIndexList() { + return __awaiter(this, void 0, void 0, function () { + var dataList, response, data, _i, data_2, a, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + dataList = ""; + return [4 /*yield*/, fetch("./data/assignments.json")]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _a.sent(); + for (_i = 0, data_2 = data; _i < data_2.length; _i++) { + a = data_2[_i]; + dataList += "\n\r"); + } + return [2 /*return*/, dataList]; + case 3: + error_2 = _a.sent(); + console.error("Error fetching data:", error_2); + return [2 /*return*/, ""]; + case 4: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/creatures.ts": +/*!***********************************!*\ + !*** ./modules/data/creatures.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get) +/* harmony export */ }); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Assuming decodeHtml function is defined or imported elsewhere + +// Fetch a single creature based on the name +function get(creature) { + return __awaiter(this, void 0, void 0, function () { + var response, data, _i, data_1, a, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch("./data/creatures.json")]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _a.sent(); + for (_i = 0, data_1 = data; _i < data_1.length; _i++) { + a = data_1[_i]; + if ((0,_extrafuncs__WEBPACK_IMPORTED_MODULE_0__.decodeHtml)(a["name"].toLowerCase()) === creature.toLowerCase()) { + return [2 /*return*/, a]; + } + } + return [2 /*return*/, null]; + case 3: + error_1 = _a.sent(); + console.error("Error fetching data:", error_1); + return [2 /*return*/, null]; + case 4: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/masters.ts": +/*!*********************************!*\ + !*** ./modules/data/masters.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get) +/* harmony export */ }); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Assuming decodeHtml function is defined or imported elsewhere + +// Fetch a single master based on the name +function get(master) { + return __awaiter(this, void 0, void 0, function () { + var response, data, _i, data_1, a, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch("./data/masters.json")]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _a.sent(); + for (_i = 0, data_1 = data; _i < data_1.length; _i++) { + a = data_1[_i]; + if ((0,_extrafuncs__WEBPACK_IMPORTED_MODULE_0__.decodeHtml)(a["name"].toLowerCase()) === master.toLowerCase()) { + return [2 /*return*/, a]; + } + } + return [2 /*return*/, null]; + case 3: + error_1 = _a.sent(); + console.error("Error fetching data:", error_1); + return [2 /*return*/, null]; + case 4: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/reapers.ts": +/*!*********************************!*\ + !*** ./modules/data/reapers.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get), +/* harmony export */ getIndexList: () => (/* binding */ getIndexList) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Fetch a single reaper based on the index or alias +function get(reaper) { + return __awaiter(this, void 0, void 0, function () { + var response, data, _i, data_1, a, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch("./data/reapers.json")]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _a.sent(); + for (_i = 0, data_1 = data; _i < data_1.length; _i++) { + a = data_1[_i]; + if (a["index"].toLowerCase() === reaper.toLowerCase()) { + return [2 /*return*/, a]; + } + } + return [2 /*return*/, null]; + case 3: + error_1 = _a.sent(); + console.error("Error fetching data:", error_1); + return [2 /*return*/, null]; + case 4: return [2 /*return*/]; + } + }); + }); +} +// Get an array of the index as HTML option elements +function getIndexList() { + return __awaiter(this, void 0, void 0, function () { + var dataList, response, data, _i, data_2, a, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + dataList = ""; + return [4 /*yield*/, fetch("./data/reapers.json")]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _a.sent(); + for (_i = 0, data_2 = data; _i < data_2.length; _i++) { + a = data_2[_i]; + dataList += "\n\r"); + } + return [2 /*return*/, dataList]; + case 3: + error_2 = _a.sent(); + console.error("Error fetching data:", error_2); + return [2 /*return*/, ""]; + case 4: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/variants.ts": +/*!**********************************!*\ + !*** ./modules/data/variants.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get) +/* harmony export */ }); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Import the decodeHtml function + +// Fetch a single variant based on the creature name and variant name +function get(creature, variant) { + return __awaiter(this, void 0, void 0, function () { + var response, data, _i, data_1, a, _a, _b, b, error_1; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _c.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch("./data/creatures.json")]; + case 1: + response = _c.sent(); + return [4 /*yield*/, response.json()]; + case 2: + data = _c.sent(); + for (_i = 0, data_1 = data; _i < data_1.length; _i++) { + a = data_1[_i]; + if ((0,_extrafuncs__WEBPACK_IMPORTED_MODULE_0__.decodeHtml)(a["name"].toLowerCase()) === creature.toLowerCase()) { + for (_a = 0, _b = a["variants"]; _a < _b.length; _a++) { + b = _b[_a]; + if (b["name"].toLowerCase() === variant.toLowerCase()) { + return [2 /*return*/, b]; + } + } + } + } + return [2 /*return*/, null]; + case 3: + error_1 = _c.sent(); + console.error("Error fetching data:", error_1); + return [2 /*return*/, null]; + case 4: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/dochandler.ts": +/*!*******************************!*\ + !*** ./modules/dochandler.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ animate: () => (/* reexport module object */ _dochandler_animate__WEBPACK_IMPORTED_MODULE_1__), +/* harmony export */ change: () => (/* reexport module object */ _dochandler_change__WEBPACK_IMPORTED_MODULE_2__), +/* harmony export */ getSide: () => (/* binding */ getSide), +/* harmony export */ hide: () => (/* reexport module object */ _dochandler_hide__WEBPACK_IMPORTED_MODULE_3__), +/* harmony export */ hover: () => (/* reexport module object */ _dochandler_hover__WEBPACK_IMPORTED_MODULE_4__), +/* harmony export */ main: () => (/* reexport module object */ _dochandler_main__WEBPACK_IMPORTED_MODULE_0__), +/* harmony export */ open: () => (/* reexport module object */ _dochandler_open__WEBPACK_IMPORTED_MODULE_6__), +/* harmony export */ show: () => (/* reexport module object */ _dochandler_show__WEBPACK_IMPORTED_MODULE_5__) +/* harmony export */ }); +/* harmony import */ var _dochandler_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dochandler/main */ "./modules/dochandler/main.ts"); +/* harmony import */ var _dochandler_animate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dochandler/animate */ "./modules/dochandler/animate.ts"); +/* harmony import */ var _dochandler_change__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dochandler/change */ "./modules/dochandler/change.ts"); +/* harmony import */ var _dochandler_hide__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dochandler/hide */ "./modules/dochandler/hide.ts"); +/* harmony import */ var _dochandler_hover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dochandler/hover */ "./modules/dochandler/hover.ts"); +/* harmony import */ var _dochandler_show__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dochandler/show */ "./modules/dochandler/show.ts"); +/* harmony import */ var _dochandler_open__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dochandler/open */ "./modules/dochandler/open.ts"); +// Import required modules + +// Export required modules + + + + + + + +// Function to get the side element based on the index +function getSide(i) { + var base = _dochandler_main__WEBPACK_IMPORTED_MODULE_0__.get.elid("base"); + var side = _dochandler_main__WEBPACK_IMPORTED_MODULE_0__.get.elc(i === 0 ? "left" : "right", base); + if (!side) { + side = _dochandler_main__WEBPACK_IMPORTED_MODULE_0__.get.elc("single", base); + } + return side; +} + + +/***/ }), + +/***/ "./modules/dochandler/animate.ts": +/*!***************************************!*\ + !*** ./modules/dochandler/animate.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ loading: () => (/* binding */ loading), +/* harmony export */ loadingStop: () => (/* binding */ loadingStop) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +// Import required modules + +// Function to show the loading bar +function loading() { + var loadingBar = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("loading-bar"); + if (loadingBar) { + loadingBar.style.visibility = "visible"; + } +} +// Function to hide the loading bar +function loadingStop() { + var loadingBar = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("loading-bar"); + if (loadingBar) { + loadingBar.style.visibility = "hidden"; + } +} + + +/***/ }), + +/***/ "./modules/dochandler/change.ts": +/*!**************************************!*\ + !*** ./modules/dochandler/change.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignment: () => (/* binding */ assignment), +/* harmony export */ creature: () => (/* binding */ creature), +/* harmony export */ reaper: () => (/* binding */ reaper), +/* harmony export */ variant: () => (/* binding */ variant) +/* harmony export */ }); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +/* harmony import */ var _data_masters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/masters */ "./modules/data/masters.ts"); +/* harmony import */ var _data_reapers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/reapers */ "./modules/data/reapers.ts"); +/* harmony import */ var _data_assignnments__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/assignnments */ "./modules/data/assignnments.ts"); +/* harmony import */ var _data_creatures__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/creatures */ "./modules/data/creatures.ts"); +/* harmony import */ var _data_variants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/variants */ "./modules/data/variants.ts"); +/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../logger */ "./modules/logger.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Import all modules as namespaces + + + + + + + + + +// Update the Creature variant shown +function variant(i_1) { + return __awaiter(this, arguments, void 0, function (i, creature, variant) { + var side, data, imageContainer, imageElement, newSize, kills; + if (creature === void 0) { creature = null; } + if (variant === void 0) { variant = null; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Start loading animation + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_1__.getSide(i); + // Return early if UI is limited or data is not available + if ((_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited || _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) && (!creature || !variant)) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + // Fetch creature and variant from UI elements if not provided + if (!creature) { + creature = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).value; + } + if (!variant) { + variant = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("variants", side).value; + } + _logger__WEBPACK_IMPORTED_MODULE_8__.log("Change variant to: ".concat(creature, "#").concat(variant)); + return [4 /*yield*/, _data_variants__WEBPACK_IMPORTED_MODULE_7__.get(creature, variant)]; + case 1: + data = _a.sent(); + if (data) { + // Update UI if not limited + if (!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) { + imageContainer = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("image-container", side); + imageContainer.innerHTML = data["image"].replace("#", "%23"); + imageElement = imageContainer.firstElementChild; + newSize = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.calculateAspectRatioFit(parseInt(imageElement.getAttribute("width")), parseInt(imageElement.getAttribute("height")), imageContainer.offsetWidth, imageContainer.offsetHeight); + imageElement.style.maxWidth = "".concat(newSize.width, "px"); + imageElement.style.maxHeight = "".concat(newSize.height, "px"); + // Update stats + updateStats(side, data); + } + kills = parseInt(_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("kills", side).innerHTML, 10); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("total-slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas((data["slayer-exp"] * kills).toFixed(2)); + } + // Stop loading animation + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + }); + }); +} +// Helper function to update stats +function updateStats(side, data) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("level", side).innerHTML = data["level"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("slayer-level", side).innerHTML = data["slayer-level"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("lifepoints", side).innerHTML = data["lifepoints"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("defence", side).innerHTML = data["defence"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-melee", side).innerHTML = data["max-melee"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-ranged", side).innerHTML = data["max-ranged"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-magic", side).innerHTML = data["max-magic"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-necromancy", side).innerHTML = data["max-necromancy"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-spec", side).innerHTML = data["max-spec"]; + // Update weakness and susceptibility + var weaknessElem = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("weaknessBox", side); + weaknessElem.innerHTML = "

Weakness

" + data["weakness"].join(""); + var susceptibleElem = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("susceptibleBox", side); + susceptibleElem.innerHTML = "

Susceptible

" + data["susceptible"].join(""); + // Update experience values + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("combat-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(data["experience"].toFixed(2)); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("lifepoints-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(data["lifepoint-exp"].toFixed(2)); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(data["slayer-exp"].toFixed(2)); +} +// Update the Creature shown +function creature(i_1) { + return __awaiter(this, arguments, void 0, function (i, creature, variant) { + var side, data, variantsElem_1; + if (creature === void 0) { creature = null; } + if (variant === void 0) { variant = null; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Start loading animation + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_1__.getSide(i); + // Return early if UI is limited and no creature is provided + if ((_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited || _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) && !creature) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + // Fetch creature from UI elements if not provided + if (!creature) { + creature = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).value; + } + _logger__WEBPACK_IMPORTED_MODULE_8__.log("Change Creature to: ".concat(creature).concat(variant ? "#".concat(variant) : '')); + return [4 /*yield*/, _data_creatures__WEBPACK_IMPORTED_MODULE_6__.get(creature)]; + case 1: + data = _a.sent(); + if (data) { + // Update variants if available + if (data["variants"] && !_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) { + variantsElem_1 = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("variants", side); + variantsElem_1.innerHTML = ""; + data["variants"].forEach(function (a) { + variantsElem_1.innerHTML += ""); + }); + if (!variant) { + variant = data["variants"][0]["name"]; + } + } + // Update the variant to reflect changes + _dochandler__WEBPACK_IMPORTED_MODULE_1__.change.variant(i, creature, variant); + } + // Stop loading animation + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + }); + }); +} +// Update the reaper assignment data +function reaper(task, count) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, assignment(2, task, count)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); +} +// Update the entire Assignment data +function assignment(i, task, count) { + return __awaiter(this, void 0, void 0, function () { + var side, nameElement, slayer_exp, slayxp, data, total_exp, j, img, masterData, kills, _loop_1, j, j, j, j, j, _i, _a, a, defaultCreature, _b, creature_1, variant_1; + var _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + // Ensure correct task loading conditions + if (i === 1 && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.doubleLoaded) { + console.error("Cannot load double slayer task if only 1 is displayed!"); + return [2 /*return*/]; + } + if (i === 2 && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.reaperLoaded) { + console.error("Cannot load reaper task if 2 are displayed!"); + return [2 /*return*/]; + } + // Show loading animation + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_1__.getSide(i); + nameElement = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side); + if (!nameElement) + return [2 /*return*/]; + // Check if the current task is the same as the new one + if ((task == null && nameElement.innerHTML !== "???") || nameElement.innerHTML.toLowerCase() === task.toLowerCase()) { + _logger__WEBPACK_IMPORTED_MODULE_8__.log("Update task: [".concat(count, "] ").concat(task, " ").concat(i === 0 ? "(Default)" : (i === 2 ? "(Reaper)" : "(1 Slayer Token)"))); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("kills", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(count); + slayer_exp = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("slayer-exp", side); + if (slayer_exp && slayer_exp.innerHTML !== "") { + slayxp = parseInt(slayer_exp.innerHTML); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("total-slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas((slayxp * count).toFixed(2)); + } + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + // Load new task data + _logger__WEBPACK_IMPORTED_MODULE_8__.log("Load task: [".concat(count, "] ").concat(task, " ").concat(i === 0 ? "(Default)" : (i === 2 ? "(Reaper)" : "(1 Slayer Token)"))); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("type", side).innerHTML = i === 0 ? "(Default)" : (i === 2 ? "(Reaper)" : "(1 Slayer Token)"); + if (i === 2) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("type", side).id = "type-reaper"; + return [4 /*yield*/, (i === 2 ? _data_reapers__WEBPACK_IMPORTED_MODULE_4__.get(task) : _data_assignnments__WEBPACK_IMPORTED_MODULE_5__.get(task))]; + case 1: + data = _d.sent(); + if (!data) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + // Update UI elements with the new data + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side).innerHTML = data["index"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side).title = data["index"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("kills", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(count); + if (_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) { + total_exp = 0; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("total-slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(total_exp); + } + if (!(!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded)) return [3 /*break*/, 6]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("masters", side).innerHTML = "
Assignment Range
"; + j = 0; + _d.label = 2; + case 2: + if (!(j < data["masters"].length)) return [3 /*break*/, 5]; + img = "\"").concat(data["masters"][j],"); + return [4 /*yield*/, _data_masters__WEBPACK_IMPORTED_MODULE_3__.get(data["masters"][j])]; + case 3: + masterData = _d.sent(); + kills = masterData["task-counts"][data["index"]]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("masters", side).innerHTML += "
").concat(img, " Kills: ").concat(kills, "
"); + _d.label = 4; + case 4: + j++; + return [3 /*break*/, 2]; + case 5: + _loop_1 = function (j) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("masterInfo".concat(j), side).addEventListener('click', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_1__.open.wiki.master(i, j); }); + }; + for (j = 0; j < data["masters"].length; j++) { + _loop_1(j); + } + // Update equipment data + if (data["equipment"]) { + for (j = 0; j < 3; j++) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipInfo".concat(j + 1), side).innerHTML = j === 0 ? "None" : ""; + } + for (j = 0; j < data["equipment"].length; j++) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipInfo".concat(j + 1), side).innerHTML = data["equipment"][j] || "Database Empty"; + } + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipMore", side).style.visibility = data["equipment"].length < 3 ? "hidden" : "visible"; + } + else { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipMore", side).style.visibility = "hidden"; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipInfo1", side).innerHTML = "Database Missing"; + } + // Update locations data + if (data["locations"]) { + for (j = 0; j < 3; j++) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationInfo".concat(j + 1), side).innerHTML = j === 0 ? "None" : ""; + } + for (j = 0; j < data["locations"].length; j++) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationInfo".concat(j + 1), side).innerHTML = data["locations"][j] || "Database Empty"; + } + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationMore", side).style.visibility = data["locations"].length < 3 ? "hidden" : "visible"; + } + else { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationMore", side).style.visibility = "hidden"; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationInfo1", side).innerHTML = "Database Missing"; + } + // Update creatures data + if (data["creatures"]) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).innerHTML = ""; + for (_i = 0, _a = data["creatures"]; _i < _a.length; _i++) { + a = _a[_i]; + if (!_extrafuncs__WEBPACK_IMPORTED_MODULE_2__.listContains(data["hidden-creatures"], a)) { + defaultCreature = ((_c = data["default-creature"]) === null || _c === void 0 ? void 0 : _c.split("#")[0]) || ""; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).innerHTML += ""); + } + } + } + // Set default creature and variant + if (data["default-creature"]) { + _b = data["default-creature"].split("#"), creature_1 = _b[0], variant_1 = _b[1]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.change.creature(i, creature_1, variant_1); + } + else { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.change.creature(i); + } + _d.label = 6; + case 6: + // Stop loading animation + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/dochandler/hide.ts": +/*!************************************!*\ + !*** ./modules/dochandler/hide.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignmentWikiPreview: () => (/* binding */ assignmentWikiPreview), +/* harmony export */ creatureWikiPreview: () => (/* binding */ creatureWikiPreview), +/* harmony export */ moreEquip: () => (/* binding */ moreEquip), +/* harmony export */ moreLocations: () => (/* binding */ moreLocations) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +function assignmentWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).style.visibility = "hidden"; +} +function creatureWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).style.visibility = "hidden"; +} +function moreEquip(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).style.visibility = "hidden"; +} +function moreLocations(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).style.visibility = "hidden"; +} + + +/***/ }), + +/***/ "./modules/dochandler/hover.ts": +/*!*************************************!*\ + !*** ./modules/dochandler/hover.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignmentWiki: () => (/* binding */ assignmentWiki), +/* harmony export */ creatureWiki: () => (/* binding */ creatureWiki), +/* harmony export */ moreEquip: () => (/* binding */ moreEquip), +/* harmony export */ moreLocations: () => (/* binding */ moreLocations) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +function assignmentWiki(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer; + var hideTimer = null; + showTimer = setTimeout(function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.assignmentWikiPreview(i); }, 500); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).onmouseleave = function () { + hideTimer = setTimeout(function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.assignmentWikiPreview(i); }, 200); + clearTimeout(showTimer); + }; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).onmouseenter = function () { + if (hideTimer !== null) + clearTimeout(hideTimer); + }; +} +function creatureWiki(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer; + var hideTimer = null; + showTimer = setTimeout(function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.creatureWikiPreview(i); }, 500); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).onmouseleave = function () { + hideTimer = setTimeout(function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.creatureWikiPreview(i); }, 200); + clearTimeout(showTimer); + }; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).onmouseenter = function () { + if (hideTimer !== null) + clearTimeout(hideTimer); + }; +} +function moreEquip(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer = setTimeout(function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.moreEquip(i); }, 500); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipMore", side).onmouseleave = function () { + clearTimeout(showTimer); + }; +} +function moreLocations(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer = setTimeout(function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.moreLocations(i); }, 500); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationMore", side).onmouseleave = function () { + clearTimeout(showTimer); + }; +} + + +/***/ }), + +/***/ "./modules/dochandler/main.ts": +/*!************************************!*\ + !*** ./modules/dochandler/main.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ doubleLoaded: () => (/* binding */ doubleLoaded), +/* harmony export */ get: () => (/* binding */ get), +/* harmony export */ limitedLoaded: () => (/* binding */ limitedLoaded), +/* harmony export */ reaperLoaded: () => (/* binding */ reaperLoaded), +/* harmony export */ reset: () => (/* binding */ reset), +/* harmony export */ set: () => (/* binding */ set), +/* harmony export */ setup: () => (/* binding */ setup), +/* harmony export */ singleLoaded: () => (/* binding */ singleLoaded), +/* harmony export */ suggestedLoaded: () => (/* binding */ suggestedLoaded), +/* harmony export */ toggle: () => (/* binding */ toggle) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _data_reapers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../data/reapers */ "./modules/data/reapers.ts"); +/* harmony import */ var _data_assignnments__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/assignnments */ "./modules/data/assignnments.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); +/* harmony import */ var _slayer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../slayer */ "./modules/slayer.ts"); +/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../logger */ "./modules/logger.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + + + +// Define variables +var doubleLoaded = false; +var singleLoaded = false; +var reaperLoaded = false; +var suggestedLoaded = false; +var limitedLoaded = false; +var get; +(function (get) { + function elc(id, base) { + return base.getElementsByClassName(id)[0]; + } + get.elc = elc; + function elid(id) { + return document.getElementById(id); + } + get.elid = elid; + function searchInput() { + return document.querySelector("input[name='search-info']").value; + } + get.searchInput = searchInput; +})(get || (get = {})); +var reset; +(function (reset) { + function single() { + return __awaiter(this, void 0, void 0, function () { + var baseElement; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!singleLoaded) + return [2 /*return*/]; + return [4 /*yield*/, get.elid("base")]; + case 1: + baseElement = _a.sent(); + baseElement.innerHTML = ""; + singleLoaded = false; + return [2 /*return*/]; + } + }); + }); + } + reset.single = single; + function double() { + return __awaiter(this, void 0, void 0, function () { + var baseElement; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!doubleLoaded) + return [2 /*return*/]; + return [4 /*yield*/, get.elid("base")]; + case 1: + baseElement = _a.sent(); + baseElement.innerHTML = ""; + doubleLoaded = false; + return [2 /*return*/]; + } + }); + }); + } + reset.double = double; + function reaper() { + return __awaiter(this, void 0, void 0, function () { + var baseElement; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!reaperLoaded) + return [2 /*return*/]; + return [4 /*yield*/, get.elid("base")]; + case 1: + baseElement = _a.sent(); + baseElement.innerHTML = ""; + reaperLoaded = false; + return [2 /*return*/]; + } + }); + }); + } + reset.reaper = reaper; + function suggested() { + return __awaiter(this, void 0, void 0, function () { + var baseElement; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!suggestedLoaded) + return [2 /*return*/]; + return [4 /*yield*/, get.elid("base")]; + case 1: + baseElement = _a.sent(); + baseElement.innerHTML = ""; + suggestedLoaded = false; + return [2 /*return*/]; + } + }); + }); + } + reset.suggested = suggested; + function searchBox() { + return __awaiter(this, void 0, void 0, function () { + var searchInfo; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, get.elid("search-info")]; + case 1: + searchInfo = _a.sent(); + searchInfo.value = ""; + toggle.searchText(); + return [2 /*return*/]; + } + }); + }); + } + reset.searchBox = searchBox; +})(reset || (reset = {})); +var set; +(function (set) { + // Set to use a double document + function double(task0_1, task1_1) { + return __awaiter(this, arguments, void 0, function (task0, task1, bypass) { + if (bypass === void 0) { bypass = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if ((task0 == null || task1 == null) && !doubleLoaded) + return [2 /*return*/]; + _logger__WEBPACK_IMPORTED_MODULE_5__.log("Load Double: [".concat(task0.count, "] ").concat(task0.name, " | [").concat(task1.count, "] ").concat(task1.name)); + // Reset all others + return [4 /*yield*/, reset.single()]; + case 1: + // Reset all others + _a.sent(); + return [4 /*yield*/, reset.reaper()]; + case 2: + _a.sent(); + return [4 /*yield*/, reset.suggested()]; + case 3: + _a.sent(); + if (!!doubleLoaded) return [3 /*break*/, 5]; + return [4 /*yield*/, setup.doubleAssignment()]; + case 4: + _a.sent(); + _a.label = 5; + case 5: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.assignment(0, task0.name, task0.count)]; + case 6: + _a.sent(); + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.assignment(1, task1.name, task1.count)]; + case 7: + _a.sent(); + // Log history if not bypassed + if (!bypass && task0.name && task1.name) { + _settings__WEBPACK_IMPORTED_MODULE_3__.change.addHistory({ type: 'double', tasks: [task0, task1] }); + } + return [2 /*return*/]; + } + }); + }); + } + set.double = double; + // Set to use a single document + function single(task_1) { + return __awaiter(this, arguments, void 0, function (task, bypass) { + if (bypass === void 0) { bypass = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (task == null && !singleLoaded) + return [2 /*return*/]; + _logger__WEBPACK_IMPORTED_MODULE_5__.log("Load Single: [".concat(task.count, "] ").concat(task.name)); + // Reset all others + return [4 /*yield*/, reset.double()]; + case 1: + // Reset all others + _a.sent(); + return [4 /*yield*/, reset.reaper()]; + case 2: + _a.sent(); + return [4 /*yield*/, reset.suggested()]; + case 3: + _a.sent(); + if (!!singleLoaded) return [3 /*break*/, 5]; + return [4 /*yield*/, setup.singleAssignment(0)]; + case 4: + _a.sent(); + _a.label = 5; + case 5: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.assignment(0, task.name, task.count)]; + case 6: + _a.sent(); + // Log history if not bypassed + if (!bypass && task.name) { + _settings__WEBPACK_IMPORTED_MODULE_3__.change.addHistory({ type: 'single', tasks: [task] }); + } + return [2 /*return*/]; + } + }); + }); + } + set.single = single; + // Set to use reaper tasks doc + function reaper(task_1) { + return __awaiter(this, arguments, void 0, function (task, bypass) { + if (bypass === void 0) { bypass = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (task == null && !reaperLoaded) + return [2 /*return*/]; + _logger__WEBPACK_IMPORTED_MODULE_5__.log("Load Reaper: [".concat(task.count, "] ").concat(task.name)); + // Reset all others + return [4 /*yield*/, reset.single()]; + case 1: + // Reset all others + _a.sent(); + return [4 /*yield*/, reset.double()]; + case 2: + _a.sent(); + return [4 /*yield*/, reset.suggested()]; + case 3: + _a.sent(); + return [4 /*yield*/, setup.singleAssignment(2)]; + case 4: + _a.sent(); + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.reaper(task.name, task.count)]; + case 5: + _a.sent(); + // Log history if not bypassed + if (!bypass && task.name) { + _settings__WEBPACK_IMPORTED_MODULE_3__.change.addHistory({ type: 'reaper', tasks: [task] }); + } + return [2 /*return*/]; + } + }); + }); + } + set.reaper = reaper; + // Set to use suggested tasks doc + function suggested() { + return __awaiter(this, arguments, void 0, function (bypass) { + if (bypass === void 0) { bypass = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (suggestedLoaded) + return [2 /*return*/]; + _logger__WEBPACK_IMPORTED_MODULE_5__.log("Load Suggested!"); + // Reset all others + return [4 /*yield*/, reset.single()]; + case 1: + // Reset all others + _a.sent(); + return [4 /*yield*/, reset.double()]; + case 2: + _a.sent(); + return [4 /*yield*/, reset.reaper()]; + case 3: + _a.sent(); + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.setup.suggested()]; + case 4: + _a.sent(); + // Log history if not bypassed + if (!bypass) { + _settings__WEBPACK_IMPORTED_MODULE_3__.change.addHistory({ type: 'suggestion', tasks: null }); + } + return [2 /*return*/]; + } + }); + }); + } + set.suggested = suggested; + // Set search button + function searchButtonText(s) { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-button").innerHTML = "".concat(s, ". . ."); + } + set.searchButtonText = searchButtonText; + // Set the search input + function searchInput(s) { + if (s == null) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value = s; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.toggle.searchText(); + } + set.searchInput = searchInput; +})(set || (set = {})); +var setup; +(function (setup) { + // Setup the main document + function documentMain() { + return __awaiter(this, void 0, void 0, function () { + var nisElement, _a, reapersIndexList, assignmentsIndexList; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + nisElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("nis"); + _a = nisElement; + return [4 /*yield*/, fetch("./pages/doc/body.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _b.sent(); + // Setup event listeners + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("infobutton").addEventListener('click', _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.aboutInfo); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("menubutton").addEventListener('click', _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.settingsPage); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("donatebutton").addEventListener('click', _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.donate); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("backbutton").addEventListener('click', _settings__WEBPACK_IMPORTED_MODULE_3__.change.goPreviousHistory); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("forwardbutton").addEventListener('click', _settings__WEBPACK_IMPORTED_MODULE_3__.change.goNextHistory); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-button").addEventListener('click', function () { _slayer__WEBPACK_IMPORTED_MODULE_4__.searchTasks(); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").addEventListener('input', _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.toggle.searchText); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").addEventListener('change', function () { _slayer__WEBPACK_IMPORTED_MODULE_4__.searchTasks(); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").addEventListener('keyup', function (event) { + switch (event.key) { + case "ArrowUp": + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchInput(_settings__WEBPACK_IMPORTED_MODULE_3__.search.getPreviousHistory()); + break; + case "ArrowDown": + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchInput(_settings__WEBPACK_IMPORTED_MODULE_3__.search.getNextHistory()); + break; + } + }); + return [4 /*yield*/, _data_reapers__WEBPACK_IMPORTED_MODULE_1__.getIndexList()]; + case 2: + reapersIndexList = _b.sent(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info-list").innerHTML = reapersIndexList; + return [4 /*yield*/, _data_assignnments__WEBPACK_IMPORTED_MODULE_2__.getIndexList()]; + case 3: + assignmentsIndexList = _b.sent(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info-list").innerHTML += assignmentsIndexList; + return [2 /*return*/]; + } + }); + }); + } + setup.documentMain = documentMain; + // Setup the base for double assignment + function doubleAssignment() { + return __awaiter(this, void 0, void 0, function () { + var baseElement, _a, _loop_1, i; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + limitedLoaded = true; + baseElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + _a = baseElement; + return [4 /*yield*/, fetch("./pages/doc/dual.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _b.sent(); + _loop_1 = function (i) { + var side, _c, extraInfo, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _c = side; + return [4 /*yield*/, fetch("./pages/doc/example.html").then(function (r) { return r.text(); })]; + case 1: + _c.innerHTML = _e.sent(); + // Setup event listeners + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('click', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.assignment(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('mouseover', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.assignmentWiki(i); }); + if (!!_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.ui.limited) return [3 /*break*/, 3]; + extraInfo = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("extra-info", side); + _d = extraInfo; + return [4 /*yield*/, fetch("./pages/doc/example-extra.html").then(function (r) { return r.text(); })]; + case 2: + _d.innerHTML = _e.sent(); + limitedLoaded = false; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.assignmentWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.creatureWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipMore", side).addEventListener('mouseenter', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationMore", side).addEventListener('mouseenter', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('click', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('mouseover', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.creatureWiki(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creatures", side).addEventListener('change', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("variants", side).addEventListener('change', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.variant(i); }); + _e.label = 3; + case 3: return [2 /*return*/]; + } + }); + }; + i = 0; + _b.label = 2; + case 2: + if (!(i < 2)) return [3 /*break*/, 5]; + return [5 /*yield**/, _loop_1(i)]; + case 3: + _b.sent(); + _b.label = 4; + case 4: + i++; + return [3 /*break*/, 2]; + case 5: + // Adjust the doc for limited and full + adjustForSettings(); + doubleLoaded = true; + return [2 /*return*/]; + } + }); + }); + } + setup.doubleAssignment = doubleAssignment; + // Setup the base for single assignment + function singleAssignment(i) { + return __awaiter(this, void 0, void 0, function () { + var baseElement, _a, side, _b, extraInfo, _c, statusElement; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + limitedLoaded = true; + baseElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + _a = baseElement; + return [4 /*yield*/, fetch("./pages/doc/single.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _d.sent(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _b = side; + return [4 /*yield*/, fetch("./pages/doc/example.html").then(function (r) { return r.text(); })]; + case 2: + _b.innerHTML = _d.sent(); + // Setup event listeners + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('click', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.assignment(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('mouseover', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.assignmentWiki(i); }); + if (!!_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.ui.limited) return [3 /*break*/, 4]; + extraInfo = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("extra-info", side); + _c = extraInfo; + return [4 /*yield*/, fetch("./pages/doc/example-extra.html").then(function (r) { return r.text(); })]; + case 3: + _c.innerHTML = _d.sent(); + limitedLoaded = false; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.assignmentWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.creatureWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipMore", side).addEventListener('mouseenter', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationMore", side).addEventListener('mouseenter', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).addEventListener('mouseleave', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('click', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('mouseover', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.creatureWiki(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creatures", side).addEventListener('change', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("variants", side).addEventListener('change', function () { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.variant(i); }); + _d.label = 4; + case 4: + statusElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("status", side); + if (_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.ui.status) { + statusElement.style.visibility = "visible"; + } + else { + statusElement.style.visibility = "hidden"; + } + // Adjust the doc for limited and full + adjustForSettings(); + if (i === 2) { + reaperLoaded = true; + } + else { + singleLoaded = true; + } + return [2 /*return*/]; + } + }); + }); + } + setup.singleAssignment = singleAssignment; + // Setup the base for suggested + function suggested() { + return __awaiter(this, void 0, void 0, function () { + var baseElement, _a, suggestType, _loop_2, i; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + baseElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + _a = baseElement; + return [4 /*yield*/, fetch("./pages/doc/suggested.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _b.sent(); + suggestType = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("type-suggest"); + if (suggestType) { + suggestType.addEventListener('click', function () { return window.open("https://runescape.wiki/w/Slayer_training/High-levelled"); }); + } + _loop_2 = function (i) { + var element = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("suggestion-".concat(i)); + if (element) { + element.addEventListener('click', function () { return _slayer__WEBPACK_IMPORTED_MODULE_4__.searchTasks(element.innerHTML); }); + } + }; + for (i = 1; i <= 12; i++) { + _loop_2(i); + } + suggestedLoaded = true; + return [2 /*return*/]; + } + }); + }); + } + setup.suggested = suggested; + // If limited, set the size of the base + function adjustForSettings() { + var baseElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + var divideElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("divide"); + var copyrightElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("copyright"); + if (_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.ui.limited) { + baseElement.classList.remove("base-full"); + if (divideElement) { + divideElement.classList.remove("divide-full"); + } + copyrightElement.classList.remove("copyright-full"); + } + else { + baseElement.classList.add("base-full"); + if (divideElement) { + divideElement.classList.add("divide-full"); + } + copyrightElement.classList.add("copyright-full"); + } + } +})(setup || (setup = {})); +var toggle; +(function (toggle) { + // Toggle if we are capturing screen or searching text + function searchText() { + var searchResult = _slayer__WEBPACK_IMPORTED_MODULE_4__.searchResult; + var autoCaptureEnabled = _settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.enabled; + var searchInput = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.searchInput(); + if (searchResult || (!autoCaptureEnabled && searchInput === "")) { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchButtonText("Capture"); + } + else { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchButtonText("Search"); + } + } + toggle.searchText = searchText; +})(toggle || (toggle = {})); + + +/***/ }), + +/***/ "./modules/dochandler/open.ts": +/*!************************************!*\ + !*** ./modules/dochandler/open.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ aboutInfo: () => (/* binding */ aboutInfo), +/* harmony export */ donate: () => (/* binding */ donate), +/* harmony export */ settingsPage: () => (/* binding */ settingsPage), +/* harmony export */ wiki: () => (/* binding */ wiki) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +// Open the Donate Page (https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ) +function donate() { + window.open("https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ"); +} +// Open the about info page +function aboutInfo() { + window.open("./pages/about.html", null, "width=680,height=550"); +} +// Open the settings page +function settingsPage() { + var settingsWindow = window.open("./pages/settings.html", "_blank", "width=420,height=550"); + console.warn("Settings Opened!"); + settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.window.console.warn("Settings Loaded!"); + settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.addEventListener('keyup', function (e) { + if ((e.which || e.keyCode) === 116) { + // Prevent F5 key press from refreshing the page + e.preventDefault(); + } + }); + settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.addEventListener('beforeunload', function () { + // Load the new settings and apply them + _settings__WEBPACK_IMPORTED_MODULE_1__.controller.load(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.toggle.searchText(); + console.warn("Settings Closed!"); + settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.window.console.warn("Settings Saved!"); + }); +} +var wiki; +(function (wiki) { + // Opens the wiki page for a specific task + function assignment(i) { + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var task = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("name", side).innerHTML; + if (task) { + window.open('https://runescape.wiki/' + task + '_(Slayer_assignment)'); + } + } + wiki.assignment = assignment; + // Opens the wiki page for a specific creature + function creature(i) { + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var creature = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creatures", side).value; + var variant = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("variants", side).value; + if (creature && variant) { + window.open('https://runescape.wiki/' + creature + "#" + variant); + } + } + wiki.creature = creature; + // Opens the wiki page for a specific master + function master(i, j) { + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var master = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("masterImage" + j, side).alt; + if (master) { + window.open('https://runescape.wiki/' + master); + } + } + wiki.master = master; +})(wiki || (wiki = {})); + + +/***/ }), + +/***/ "./modules/dochandler/show.ts": +/*!************************************!*\ + !*** ./modules/dochandler/show.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignmentWikiPreview: () => (/* binding */ assignmentWikiPreview), +/* harmony export */ creatureWikiPreview: () => (/* binding */ creatureWikiPreview), +/* harmony export */ moreEquip: () => (/* binding */ moreEquip), +/* harmony export */ moreLocations: () => (/* binding */ moreLocations) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +// Show the specific Creature's preview wiki page +function assignmentWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).style.visibility = "visible"; +} +// Show the specific Creature's preview wiki page +function creatureWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).style.visibility = "visible"; +} +// Show more Equipment for task +function moreEquip(i) { + var _a; + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var equipHiddenElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side); + if ((_a = equipHiddenElement.innerHTML) === null || _a === void 0 ? void 0 : _a.trimEnd()) { + equipHiddenElement.style.visibility = "visible"; + } +} +// Show more Locations for task +function moreLocations(i) { + var _a; + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var locationHiddenElement = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side); + if ((_a = locationHiddenElement.innerHTML) === null || _a === void 0 ? void 0 : _a.trimEnd()) { + locationHiddenElement.style.visibility = "visible"; + } +} + + +/***/ }), + +/***/ "./modules/extrafuncs.ts": +/*!*******************************!*\ + !*** ./modules/extrafuncs.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ calculateAspectRatioFit: () => (/* binding */ calculateAspectRatioFit), +/* harmony export */ decodeHtml: () => (/* binding */ decodeHtml), +/* harmony export */ listContains: () => (/* binding */ listContains), +/* harmony export */ numberWithCommas: () => (/* binding */ numberWithCommas) +/* harmony export */ }); +// Add commas into a number if its big enough +function numberWithCommas(n) { + if (n == null) + return "Empty"; + if (n === -666) + return "Error"; + return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} +// Check if the list contains what you want to find +function listContains(list, find) { + for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { + var l = list_1[_i]; + if (decodeHtml(l).toLowerCase() === decodeHtml(find).toLowerCase()) + return true; + } + return false; +} +// Get new width and height for image based on aspect ratio +function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) { + var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight); + return { width: srcWidth * ratio, height: srcHeight * ratio }; +} +// Decode the HTML chars that have been encoded during database downloading +function decodeHtml(html) { + var txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; +} + + +/***/ }), + +/***/ "./modules/logger.ts": +/*!***************************!*\ + !*** ./modules/logger.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ debug: () => (/* binding */ debug), +/* harmony export */ error: () => (/* binding */ error), +/* harmony export */ log: () => (/* binding */ log), +/* harmony export */ setDebug: () => (/* binding */ setDebug), +/* harmony export */ setLimit: () => (/* binding */ setLimit), +/* harmony export */ setVerbose: () => (/* binding */ setVerbose), +/* harmony export */ verbose: () => (/* binding */ verbose), +/* harmony export */ warn: () => (/* binding */ warn) +/* harmony export */ }); +// Private queues and settings +var debugQueue = []; +var verboseQueue = []; +var queueLimit = 50; +var debugEnabled = false; +var verboseEnabled = false; +// Set the queue limit for debug and verbose +function setLimit(limit) { + queueLimit = limit; +} +// Enable or disable debug logging +function setDebug(enabled) { + debugEnabled = enabled; + if (enabled) + debug("Debug logging enabled"); // Force Flush the Queue +} +// Enable or disable verbose logging +function setVerbose(enabled) { + verboseEnabled = enabled; + if (enabled) + verbose("Verbose logging enabled"); // Force Flush the Queue +} +// Public: Log to the normal queue and flush the queue +function log() { + var messages = []; + for (var _i = 0; _i < arguments.length; _i++) { + messages[_i] = arguments[_i]; + } + console.log.apply(console, messages); +} +// Public: Log to the warn queue and flush the queue +function warn() { + var messages = []; + for (var _i = 0; _i < arguments.length; _i++) { + messages[_i] = arguments[_i]; + } + console.warn.apply(console, messages); +} +// Public: Log to the error queue and flush the queue +function error() { + var messages = []; + for (var _i = 0; _i < arguments.length; _i++) { + messages[_i] = arguments[_i]; + } + console.error.apply(console, messages); +} +// Public: Log to the debug queue only if debug is enabled and flush the queue +function debug() { + var messages = []; + for (var _i = 0; _i < arguments.length; _i++) { + messages[_i] = arguments[_i]; + } + debugQueue.push(messages.join(' ')); + trimQueue(debugQueue); + if (debugEnabled) + flushQueue(debugQueue, "Debug"); +} +// Public: Log to the verbose queue only if verbose is enabled and flush the queue +function verbose() { + var messages = []; + for (var _i = 0; _i < arguments.length; _i++) { + messages[_i] = arguments[_i]; + } + verboseQueue.push(messages.join(' ')); + trimQueue(verboseQueue); + if (verboseEnabled) + flushQueue(verboseQueue, "Verbose"); +} +// Private: Trim the queue if it exceeds the limit (FIFO: remove first entry) +function trimQueue(queue) { + if (queue.length > queueLimit) + queue.shift(); +} +// Private: Flush and output the entire queue, emptying it afterward +function flushQueue(queue, label) { + while (queue.length > 0) { + var message = queue.shift(); + if (label === "Debug") + console.log("[".concat(label, "] ").concat(message)); + if (label === "Verbose") + console.warn("[".concat(label, "] ").concat(message)); + } +} + + +/***/ }), + +/***/ "./modules/settings.ts": +/*!*****************************!*\ + !*** ./modules/settings.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AutoCaptureData: () => (/* binding */ AutoCaptureData), +/* harmony export */ DefaultData: () => (/* binding */ DefaultData), +/* harmony export */ HiddenData: () => (/* binding */ HiddenData), +/* harmony export */ SettingsData: () => (/* binding */ SettingsData), +/* harmony export */ SettingsDataController: () => (/* binding */ SettingsDataController), +/* harmony export */ UIData: () => (/* binding */ UIData), +/* harmony export */ change: () => (/* binding */ change), +/* harmony export */ controller: () => (/* binding */ controller), +/* harmony export */ executeDevTools: () => (/* binding */ executeDevTools), +/* harmony export */ search: () => (/* binding */ search) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _slayer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slayer */ "./modules/slayer.ts"); +/* harmony import */ var _dochandler_main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dochandler/main */ "./modules/dochandler/main.ts"); +/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logger */ "./modules/logger.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + +// Define classes +var AutoCaptureData = /** @class */ (function () { + function AutoCaptureData() { + } + return AutoCaptureData; +}()); + +var UIData = /** @class */ (function () { + function UIData() { + } + return UIData; +}()); + +var DefaultData = /** @class */ (function () { + function DefaultData() { + } + return DefaultData; +}()); + +var HiddenData = /** @class */ (function () { + function HiddenData() { + } + return HiddenData; +}()); + +var SettingsData = /** @class */ (function () { + function SettingsData() { + } + return SettingsData; +}()); + +// Controls all the settings data +var SettingsDataController = /** @class */ (function () { + function SettingsDataController() { + this.configLoaded = false; + this.data = { + version: 1, + searchAlgorithim: "default", + autoCapture: { + enabled: true, + counter: true, + search: false, + loopTimer: 500, + counterTimer: 500, + dialogTimer: 5000, + searchTimer: 10000, + }, + ui: { + style: "default", + limited: false, + status: true, + counter: false, + counterTimer: 500, + historyRetentionCount: 10, + lookupRetentionCount: 0, + }, + showHidden: { + creatures: false, + eliteCreatures: false, + dragonkinCreatures: false, + godWarsCreatures: false, + ghorrockCreatures: false, + heartGielinorCreatures: false, + monsterCreatures: false, + newVarrockCreatures: false, + shadowReefCreatures: false, + strongholdSecurityCreatures: false, + summonedCreatures: false, + templeTrekkingCreatures: false, + unchartedIslesCreatures: false + }, + default: { + taskName0: "waterfiends", + taskName1: "black demons", + taskCount0: 777, + taskCount1: 666 + }, + }; + } + SettingsDataController.prototype.load = function () { + return __awaiter(this, void 0, void 0, function () { + var res; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (window.localStorage.getItem('version') != null) { + this.data.version = this.decodeVersion(window.localStorage.getItem('version')); + } + if (this.data.version <= 5 && !this.configLoaded) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("(Versioning System Missing) Setting up versioning system."); + window.localStorage.removeItem('recent_task_0'); + window.localStorage.removeItem('recent_task_count_0'); + window.localStorage.removeItem('recent_task_1'); + window.localStorage.removeItem('recent_task_count_1'); + this.save(); + } + return [4 /*yield*/, fetch("./data/version.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + if (this.data.version < this.decodeVersion(res['version'])) { + this.data.version = this.decodeVersion(res['version']); + } + controller.data.autoCapture.enabled = window.localStorage.getItem("auto-capture-enabled") === "true"; + controller.data.autoCapture.counter = window.localStorage.getItem("auto-capture-counter") === "true"; + controller.data.autoCapture.search = window.localStorage.getItem("auto-capture-search") === "true"; + controller.data.autoCapture.loopTimer = parseInt(window.localStorage.getItem("auto-capture-timer-loop")); + controller.data.autoCapture.dialogTimer = parseInt(window.localStorage.getItem("auto-capture-timer-dialog")); + controller.data.autoCapture.counterTimer = parseInt(window.localStorage.getItem("auto-capture-timer-counter")); + controller.data.autoCapture.searchTimer = parseInt(window.localStorage.getItem("auto-capture-timer-search")); + controller.data.ui.limited = window.localStorage.getItem("ui-limited") === "true"; + controller.data.ui.status = window.localStorage.getItem("ui-status") === "true"; + controller.data.ui.counter = window.localStorage.getItem("ui-counter") === "true"; + controller.data.ui.counterTimer = parseInt(window.localStorage.getItem("ui-counter-timer")); + // TODO Load history here then reset the UI and load them + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.single(); + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.double(); + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.reaper(); + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.suggested(); + if (!(this.data.default.taskName0 != null && this.data.default.taskName1 != null)) return [3 /*break*/, 3]; + return [4 /*yield*/, _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.double({ name: this.data.default.taskName0, count: this.data.default.taskCount0 }, { name: this.data.default.taskName1, count: this.data.default.taskCount1 })]; + case 2: + _a.sent(); + return [3 /*break*/, 5]; + case 3: + if (!(this.data.default.taskName0 != null && this.data.default.taskName1 == null)) return [3 /*break*/, 5]; + return [4 /*yield*/, _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.single({ name: this.data.default.taskName0, count: this.data.default.taskCount0 })]; + case 4: + _a.sent(); + _a.label = 5; + case 5: + console.warn("Config Loaded"); + this.configLoaded = true; + return [2 /*return*/]; + } + }); + }); + }; + SettingsDataController.prototype.save = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (this.data.version > 1) { + window.localStorage.setItem('version', this.encodeVersion(this.data.version)); + } + window.localStorage.setItem("auto-capture-enabled", "" + controller.data.autoCapture.enabled); + window.localStorage.setItem("auto-capture-counter", "" + controller.data.autoCapture.counter); + window.localStorage.setItem("auto-capture-search", "" + controller.data.autoCapture.search); + window.localStorage.setItem("auto-capture-timer-loop", "" + controller.data.autoCapture.loopTimer); + window.localStorage.setItem("auto-capture-timer-dialog", "" + controller.data.autoCapture.dialogTimer); + window.localStorage.setItem("auto-capture-timer-counter", "" + controller.data.autoCapture.counterTimer); + window.localStorage.setItem("auto-capture-timer-search", "" + controller.data.autoCapture.searchTimer); + window.localStorage.setItem("ui-limited", "" + controller.data.ui.limited); + window.localStorage.setItem("ui-status", "" + controller.data.ui.status); + window.localStorage.setItem("ui-counter", "" + controller.data.ui.counter); + window.localStorage.setItem("ui-counter-timer", "" + controller.data.ui.counterTimer); + console.warn("Config Saved"); + return [2 /*return*/]; + }); + }); + }; + SettingsDataController.prototype.decodeVersion = function (version) { + var versionSplit = version.split("."); + var versionUpper = versionSplit.length > 2 ? parseInt(versionSplit[0]) : 0; + var versionLower = parseInt(versionSplit.length > 2 ? versionSplit[1] : versionSplit[0]); + var versionPatch = parseInt(versionSplit.length > 2 ? versionSplit[2] : versionSplit[1]); + return ((versionUpper * 256 * 256) + (versionLower * 256) + versionPatch); + }; + SettingsDataController.prototype.encodeVersion = function (version) { + var versionUpper = version > 256 * 256 ? version / (256 * 256) : 0; + var versionLower = version > 256 ? (version - (versionUpper * 256 * 256)) / 256 : 0; + var versionPatch = (version - (versionUpper * 256 * 256) - (versionLower * 256)); + return versionUpper + "." + versionLower + "." + versionPatch; + }; + return SettingsDataController; +}()); + +var controller = new SettingsDataController(); +// Change history functions +var change; +(function (change) { + change.history = []; + change.index = 0; + function addHistory(history) { + if (!history || !history.tasks || !change.history[change.index]) + return; + if ((history.type === "single" || history.type === "reaper") && + history.tasks[0].name === change.history[change.index].tasks[0].name) + return; + if (history.type === "double" && + history.tasks[0].name === change.history[change.index].tasks[0].name && + history.tasks[1].name === change.history[change.index].tasks[1].name) + return; + if (history.type === "suggestion" && history.type === change.history[change.index].type) + return; + if (change.index + 1 != change.history.length) { + change.history = change.history.slice(0, change.index + 1); + } + change.history.push(history); + change.index = change.history.length - 1; + console.warn("Save History"); + controller.save(); + } + change.addHistory = addHistory; + function refreshCurrent() { + if (change.index < 0 || change.index >= change.history.length) + return; + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.single(); + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.double(); + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.reaper(); + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.reset.suggested(); + var previousChange = change.history[change.index]; + if (previousChange.type === 'double') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.double(previousChange.tasks[0], previousChange.tasks[1], true); + if (previousChange.type === 'single') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.single(previousChange.tasks[0], true); + if (previousChange.type === 'reaper') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.reaper(previousChange.tasks[0], true); + if (previousChange.type === 'suggestion') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.suggested(true); + console.warn("Save History"); + controller.save(); + } + change.refreshCurrent = refreshCurrent; + function goPreviousHistory() { + if (change.index - 1 < 0) + return; + var previousChange = change.history[--change.index]; + if (previousChange.type === 'double') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.double(previousChange.tasks[0], previousChange.tasks[1], true); + if (previousChange.type === 'single') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.single(previousChange.tasks[0], true); + if (previousChange.type === 'reaper') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.reaper(previousChange.tasks[0], true); + if (previousChange.type === 'suggestion') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.suggested(true); + console.warn("Save History"); + controller.save(); + } + change.goPreviousHistory = goPreviousHistory; + function goNextHistory() { + if (change.index + 1 >= change.history.length) + return; + var nextChange = change.history[++change.index]; + if (nextChange.type === 'double') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.double(nextChange.tasks[0], nextChange.tasks[1], true); + if (nextChange.type === 'single') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.single(nextChange.tasks[0], true); + if (nextChange.type === 'reaper') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.reaper(nextChange.tasks[0], true); + if (nextChange.type === 'suggestion') + _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.set.suggested(true); + console.warn("Save History"); + controller.save(); + } + change.goNextHistory = goNextHistory; +})(change || (change = {})); +var search; +(function (search) { + var temp = null; + var history = []; + var index = 0; + function addHistory(value) { + if (!value) + return; + history.push(value); + index = history.length; + temp = null; + console.warn("Save History"); + controller.save(); + } + search.addHistory = addHistory; + function getPreviousHistory() { + tempValue(); + console.warn("Save History"); + controller.save(); + if (index - 1 < 0) + return null; + if (--index === history.length) + return temp; + return history[index]; + } + search.getPreviousHistory = getPreviousHistory; + function getNextHistory() { + tempValue(); + console.warn("Save History"); + controller.save(); + if (index + 1 > history.length + (temp === "" ? 0 : 1)) + return null; + if (++index === history.length + (temp === "" ? 0 : 1)) + return ""; + if (temp !== "" && index === history.length) + return temp; + return history[index]; + } + search.getNextHistory = getNextHistory; + function tempValue() { + var currentValue = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value; + if (temp === null) + temp = currentValue; + if (index === history.length && temp !== currentValue) + temp = currentValue; + if (index === history.length + 1 && currentValue !== "") { + temp = currentValue; + --index; + } + } +})(search || (search = {})); +function executeDevTools(value) { + return __awaiter(this, void 0, void 0, function () { + var counterData, slayerData, a, a, pos, box, _i, _a, _b, index, option, e_1; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (value === "devTools") { + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Information Opened ~~~ "); + alt1.openBrowser("https://runeapps.org/forums/viewtopic.php?id=101"); + return [2 /*return*/]; + } + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Started ~~~ "); + _c.label = 1; + case 1: + _c.trys.push([1, 10, , 11]); + if (!(value === "size")) return [3 /*break*/, 2]; + _logger__WEBPACK_IMPORTED_MODULE_3__.log("Current Size: ".concat(document.body.clientWidth, ", ").concat(document.body.clientHeight)); + return [3 /*break*/, 9]; + case 2: + if (!(value === "debug")) return [3 /*break*/, 3]; + _logger__WEBPACK_IMPORTED_MODULE_3__.setDebug(true); + return [3 /*break*/, 9]; + case 3: + if (!(value === "verbose")) return [3 /*break*/, 4]; + _logger__WEBPACK_IMPORTED_MODULE_3__.setVerbose(true); + return [3 /*break*/, 9]; + case 4: + if (!(value === "counterReader")) return [3 /*break*/, 6]; + return [4 /*yield*/, _slayer__WEBPACK_IMPORTED_MODULE_1__.counterReader.read()]; + case 5: + counterData = _c.sent(); + if (counterData) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Counter UI Collapsed [".concat(counterData.collapsed, "]")); + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Counter UI Old School [".concat(counterData.OS, "]")); + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Counter UI Reaper [".concat(counterData.reaper, "]")); + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Counter UI Count [".concat(counterData.count, "]")); + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Counter UI Task [".concat(counterData.task, "]")); + } + else { + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Error: Cannot read counter data! ~~~ "); + } + return [3 /*break*/, 9]; + case 6: + if (!(value === "slayerReader")) return [3 /*break*/, 8]; + return [4 /*yield*/, _slayer__WEBPACK_IMPORTED_MODULE_1__.slayerReader.read()]; + case 7: + slayerData = _c.sent(); + if (slayerData) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Slayer Reader Select Your Own [".concat(slayerData.selectYourOwn, "]")); + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Slayer Reader Reaper [".concat(slayerData.reaper, "]")); + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Slayer Reader Ticket [".concat(slayerData.ticket, "]")); + for (a in slayerData.count) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Slayer Reader Count{".concat(a, "} [").concat(slayerData.count[a], "]")); + } + for (a in slayerData.task) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Slayer Reader Task{".concat(a, "} [").concat(slayerData.task[a], "]")); + } + } + else { + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Error: Cannot read slayer data! ~~~ "); + } + return [3 /*break*/, 9]; + case 8: + if (value === "dialogReader") { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("Searching for Dialog..."); + pos = _slayer__WEBPACK_IMPORTED_MODULE_1__.slayerReader.dialogReader.find(); + if (!pos) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Error: Cannot find the Dialog! ~~~ "); + return [2 /*return*/]; + } + box = _slayer__WEBPACK_IMPORTED_MODULE_1__.slayerReader.dialogReader.read(); + if (!box) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Error: Cannot read the Dialog! ~~~ "); + return [2 /*return*/]; + } + if (box.title) + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Dialog Box Title [".concat(box.title, "]")); + if (box.text) + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Dialog Box Text [".concat(box.text, "]")); + if (box.opts) { + _logger__WEBPACK_IMPORTED_MODULE_3__.log("The Dialog Box Options (".concat(box.opts.length, ") [").concat(box.opts, "]")); + for (_i = 0, _a = box.opts.entries(); _i < _a.length; _i++) { + _b = _a[_i], index = _b[0], option = _b[1]; + _logger__WEBPACK_IMPORTED_MODULE_3__.log("\t".concat(index + 1, ". ").concat(option.text)); + } + } + } + _c.label = 9; + case 9: return [3 /*break*/, 11]; + case 10: + e_1 = _c.sent(); + console.error("~~~ Dev Tools ~ Error: Issue Capturing Screen! ~~~ "); + return [3 /*break*/, 11]; + case 11: + _logger__WEBPACK_IMPORTED_MODULE_3__.log(" ~~~ Dev Tools ~ Finished ~~~ "); + return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/slayer.ts": +/*!***************************!*\ + !*** ./modules/slayer.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ canCaptureRunescape: () => (/* binding */ canCaptureRunescape), +/* harmony export */ captureRunescape: () => (/* binding */ captureRunescape), +/* harmony export */ counterReader: () => (/* binding */ counterReader), +/* harmony export */ findTask: () => (/* binding */ findTask), +/* harmony export */ searchAlgo: () => (/* binding */ searchAlgo), +/* harmony export */ searchResult: () => (/* binding */ searchResult), +/* harmony export */ searchTasks: () => (/* binding */ searchTasks), +/* harmony export */ slayerReader: () => (/* binding */ slayerReader) +/* harmony export */ }); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _SearchAlgorithm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SearchAlgorithm */ "./modules/SearchAlgorithm.ts"); +/* harmony import */ var _SlayerDialogReader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SlayerDialogReader */ "./modules/SlayerDialogReader.ts"); +/* harmony import */ var _UICounterReader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UICounterReader */ "./modules/UICounterReader.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings */ "./modules/settings.ts"); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./logger */ "./modules/logger.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + + + + +// Setup the readers and search algo +var searchAlgo = new _SearchAlgorithm__WEBPACK_IMPORTED_MODULE_0__.SearchAlgorithm(); +var slayerReader = new _SlayerDialogReader__WEBPACK_IMPORTED_MODULE_1__.SlayerDialogReader(); +var counterReader = new _UICounterReader__WEBPACK_IMPORTED_MODULE_2__.UICounterReader(); +var searchResult = false; +// Get a timer and setup vars +var timer = function (ms) { return new Promise(function (res) { return setTimeout(res, ms); }); }; +var loopRunning = false; +// Check if we can capture the screen +function canCaptureRunescape() { + return window.alt1 && alt1.rsLinked && alt1.permissionPixel; +} +// Capture the screen +function captureRunescape() { + if (!canCaptureRunescape()) + return null; + try { + return alt1__WEBPACK_IMPORTED_MODULE_6__.captureHoldFullRs(); + } + catch (ex) { + if (ex.message === "capturehold failed") + console.warn("Capturing screen failed! Is runescape open?"); + } + return null; +} +// Find a task on the current screen +function findTask(buffer) { + return __awaiter(this, void 0, void 0, function () { + var slayerData, counterData; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.enabled || loopRunning || searchResult) + return [2 /*return*/]; + if (!buffer) + buffer = captureRunescape(); + if (!buffer) + return [2 /*return*/]; + loopRunning = true; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + return [4 /*yield*/, slayerReader.read(buffer)]; + case 1: + slayerData = _a.sent(); + if (!(slayerData && slayerData[0])) return [3 /*break*/, 11]; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loading(); + if (!slayerData.selectYourOwn) return [3 /*break*/, 3]; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.suggested(); + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.dialogTimer)]; + case 2: + _a.sent(); + loopRunning = false; + return [2 /*return*/]; + case 3: + if (!(slayerData.reaper && !slayerData.ticket)) return [3 /*break*/, 5]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.reaper({ name: slayerData[0].task, count: slayerData[0].count })]; + case 4: + _a.sent(); + return [3 /*break*/, 9]; + case 5: + if (!slayerData.ticket) return [3 /*break*/, 7]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.double({ name: slayerData[0].task, count: slayerData[0].count }, { name: slayerData[1].task, count: slayerData[1].count })]; + case 6: + _a.sent(); + return [3 /*break*/, 9]; + case 7: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.single({ name: slayerData[0].task, count: slayerData[0].count })]; + case 8: + _a.sent(); + _a.label = 9; + case 9: + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.dialogTimer)]; + case 10: + _a.sent(); + loopRunning = false; + return [3 /*break*/, 21]; + case 11: + if (!_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.counter) return [3 /*break*/, 20]; + return [4 /*yield*/, counterReader.read(buffer)]; + case 12: + counterData = _a.sent(); + if (!counterData) return [3 /*break*/, 18]; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loading(); + if (!(counterData.reaper && (_dochandler__WEBPACK_IMPORTED_MODULE_4__.main.reaperLoaded || counterData.task != null))) return [3 /*break*/, 14]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.reaper({ name: counterData.task, count: counterData.count })]; + case 13: + _a.sent(); + return [3 /*break*/, 16]; + case 14: + if (!(!counterData.reaper && (_dochandler__WEBPACK_IMPORTED_MODULE_4__.main.singleLoaded || counterData.task != null))) return [3 /*break*/, 16]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.single({ name: counterData.task, count: counterData.count })]; + case 15: + _a.sent(); + _a.label = 16; + case 16: + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.counterTimer)]; + case 17: + _a.sent(); + loopRunning = false; + return [3 /*break*/, 19]; + case 18: + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + loopRunning = false; + _a.label = 19; + case 19: return [3 /*break*/, 21]; + case 20: + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + loopRunning = false; + _a.label = 21; + case 21: return [2 /*return*/]; + } + }); + }); +} +// Search for tasks +function searchTasks(value) { + return __awaiter(this, void 0, void 0, function () { + var tool, lookup, tasks, _i, lookup_1, term, data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!!value) return [3 /*break*/, 2]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.get.searchInput()]; + case 1: + value = _a.sent(); + _a.label = 2; + case 2: + _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.reset.searchBox(); + _settings__WEBPACK_IMPORTED_MODULE_3__.search.addHistory(value); + if (!(value.length == 0 && (searchResult || !_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.enabled))) return [3 /*break*/, 4]; + searchResult = false; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.toggle.searchText(); + return [4 /*yield*/, findTask()]; + case 3: + _a.sent(); + return [2 /*return*/]; + case 4: + if (value.startsWith("devTools")) { + tool = value.includes(" ") ? value.substring(value.indexOf(" ") + 1) : value; + _settings__WEBPACK_IMPORTED_MODULE_3__.executeDevTools(tool); + return [2 /*return*/]; + } + else if (value.toLowerCase().includes("suggest")) { + _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.suggested(); + return [2 /*return*/]; + } + _a.label = 5; + case 5: + searchResult = true; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.toggle.searchText(); + lookup = value.includes("|") ? + [value.substring(0, value.indexOf("|")), value.substring(value.indexOf("|") + 1)] : + [value]; + tasks = []; + _i = 0, lookup_1 = lookup; + _a.label = 6; + case 6: + if (!(_i < lookup_1.length)) return [3 /*break*/, 9]; + term = lookup_1[_i]; + return [4 /*yield*/, searchAlgo.lookup(term, lookup.length > 1)]; + case 7: + data = _a.sent(); + if (data) { + _logger__WEBPACK_IMPORTED_MODULE_5__.log("Search for (Reaper/Slayer Assignment, Alias, or Creature): " + data.task); + tasks.push({ name: data.task, reaper: data.reaper }); + } + _a.label = 8; + case 8: + _i++; + return [3 /*break*/, 6]; + case 9: + if (!(tasks.length > 1)) return [3 /*break*/, 11]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.double({ name: tasks[0].name, count: 1 }, { name: tasks[1].name, count: 1 })]; + case 10: + _a.sent(); + return [3 /*break*/, 15]; + case 11: + if (!(tasks.length == 1)) return [3 /*break*/, 15]; + if (!tasks[0].reaper) return [3 /*break*/, 13]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.reaper({ name: tasks[0].name, count: 1 })]; + case 12: + _a.sent(); + return [3 /*break*/, 15]; + case 13: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.set.single({ name: tasks[0].name, count: 1 })]; + case 14: + _a.sent(); + _a.label = 15; + case 15: + _dochandler__WEBPACK_IMPORTED_MODULE_4__.animate.loadingStop(); + if (!!_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.search) return [3 /*break*/, 17]; + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_3__.controller.data.autoCapture.searchTimer)]; + case 16: + _a.sent(); + searchResult = false; + _dochandler__WEBPACK_IMPORTED_MODULE_4__.main.toggle.searchText(); + _a.label = 17; + case 17: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./fonts/aa_10px_mono.fontmeta.json": +/*!******************************************!*\ + !*** ./fonts/aa_10px_mono.fontmeta.json ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +module.exports = __webpack_require__.p + "aa_10px_mono.fontmeta.json"; + +/***/ }), + +/***/ "./fonts/aa_8px_mono.fontmeta.json": +/*!*****************************************!*\ + !*** ./fonts/aa_8px_mono.fontmeta.json ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +module.exports = __webpack_require__.p + "aa_8px_mono.fontmeta.json"; + +/***/ }), + +/***/ "./appconfig.json": +/*!************************!*\ + !*** ./appconfig.json ***! + \************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +module.exports = __webpack_require__.p + "appconfig.json"; + +/***/ }), + +/***/ "./index.html": +/*!********************!*\ + !*** ./index.html ***! + \********************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +module.exports = __webpack_require__.p + "index.html"; + +/***/ }), + +/***/ "canvas": +/*!*************************!*\ + !*** external "canvas" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +if(typeof __WEBPACK_EXTERNAL_MODULE_canvas__ === 'undefined') { var e = new Error("Cannot find module 'canvas'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_canvas__; + +/***/ }), + +/***/ "electron/common": +/*!**********************************!*\ + !*** external "electron/common" ***! + \**********************************/ +/***/ ((module) => { + +"use strict"; +if(typeof __WEBPACK_EXTERNAL_MODULE_electron_common__ === 'undefined') { var e = new Error("Cannot find module 'electron/common'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_electron_common__; + +/***/ }), + +/***/ "sharp": +/*!************************!*\ + !*** external "sharp" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +if(typeof __WEBPACK_EXTERNAL_MODULE_sharp__ === 'undefined') { var e = new Error("Cannot find module 'sharp'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_sharp__; + +/***/ }), + +/***/ "../node_modules/alt1/dist/base/index.js": +/*!***********************************************!*\ + !*** ../node_modules/alt1/dist/base/index.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory((function webpackLoadOptionalExternalModule() { try { return __webpack_require__(/*! sharp */ "sharp"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return __webpack_require__(/*! canvas */ "canvas"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return __webpack_require__(/*! electron/common */ "electron/common"); } catch(e) {} }())); + else {} +})(globalThis, (__WEBPACK_EXTERNAL_MODULE_sharp__, __WEBPACK_EXTERNAL_MODULE_canvas__, __WEBPACK_EXTERNAL_MODULE_electron_common__) => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/base/alt1api.ts": +/*!*****************************!*\ + !*** ./src/base/alt1api.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "./src/base/declarations.ts": +/*!**********************************!*\ + !*** ./src/base/declarations.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "./src/base/imagedata-extensions.ts": +/*!******************************************!*\ + !*** ./src/base/imagedata-extensions.ts ***! + \******************************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_2062__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImageData = void 0; +const a1lib = __importStar(__nested_webpack_require_2062__(/*! ./index */ "./src/base/index.ts")); +const nodeimports = __importStar(__nested_webpack_require_2062__(/*! ./nodepolyfill */ "./src/base/nodepolyfill.ts")); +// //TODO revamp this madness a bit? +// (function () { +// var globalvar = (typeof self != "undefined" ? self : (typeof (global as any) != "undefined" ? (global as any) : null)) as any; +// //use the node-canvas version when on node +// if (typeof globalvar.ImageData == "undefined") { +// let nodecnv = requireNodeCanvas(); +// globalvar.ImageData = nodecnv.ImageData; +// } +// var fill = typeof globalvar.ImageData == "undefined"; +// //should never be reach anymore +// var constr = function (this: any) { +// var i = 0; +// var data = (arguments[i] instanceof Uint8ClampedArray ? arguments[i++] : null); +// var width = arguments[i++]; +// var height = arguments[i++]; +// if (fill) { +// if (!data) { data = new Uint8ClampedArray(width * height * 4); } +// this.width = width; +// this.height = height; +// this.data = data; +// } +// else if (oldconstr) { +// return (data ? new oldconstr(data, width, height) : new oldconstr(width, height)); +// } else { +// var canvas = document.createElement('canvas'); +// canvas.width = width; +// canvas.height = height; +// var ctx = canvas.getContext("2d")!; +// var imageData = ctx.createImageData(width, height); +// if (data) { imageData.data.set(data); } +// return imageData; +// } +// } +// var oldconstr = globalvar.ImageData; +// if (typeof document != "undefined") { +// try { +// new oldconstr(1, 1); +// } catch (e) { +// //direct constructor call not allowed in ie +// oldconstr = null; +// } +// } +// if (!fill) { constr.prototype = globalvar.ImageData.prototype; } +// globalvar.ImageData = constr; +// ImageData = constr as any; +// })(); +(function () { + var globalvar = (typeof self != "undefined" ? self : (typeof __nested_webpack_require_2062__.g != "undefined" ? __nested_webpack_require_2062__.g : null)); + var filltype = typeof globalvar.ImageData == "undefined" || typeof globalvar.document == "undefined"; + var fillconstr = filltype; + if (!filltype) { + var oldconstr = globalvar.ImageData; + try { + let data = new Uint8ClampedArray(4); + data[0] = 1; + let a = new globalvar.ImageData(data, 1, 1); + fillconstr = a.data[0] != 1; + } + catch (e) { + fillconstr = true; + } + } + if (fillconstr) { + var constr = function ImageDataShim() { + var i = 0; + var data = (arguments[i] instanceof Uint8ClampedArray ? arguments[i++] : null); + var width = arguments[i++]; + var height = arguments[i++]; + if (filltype) { + if (!data) { + data = new Uint8ClampedArray(width * height * 4); + } + this.width = width; + this.height = height; + this.data = data; + } + else if (fillconstr) { + //WARNING This branch of code does not use the same pixel data backing store + //(problem with wasm, however all wasm browser have a native constructor (unless asm.js is used)) + var canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + var ctx = canvas.getContext("2d"); + var imageData = ctx.createImageData(width, height); + if (data) { + imageData.data.set(data); + } + return imageData; + } + // else { + // //oh no... + // //we need this monstrocity in order to call the native constructor with variable number of args + // //when es5 transpile is enable (that strips the spread operator) + // return new (Function.prototype.bind.apply(oldconstr, [null,...arguments])); + // } + }; + if (!filltype) { + constr.prototype = globalvar.ImageData.prototype; + } + globalvar.ImageData = constr; + exports.ImageData = constr; + } + else { + exports.ImageData = globalvar.ImageData; + } +})(); +//Recast into a drawable imagedata class on all platforms, into a normal browser ImageData on browsers or a node-canvas imagedata on nodejs +exports.ImageData.prototype.toDrawableData = function () { + if (typeof document == "undefined") { + return nodeimports.imageDataToDrawable(this); + } + else { + return this; + } +}; +exports.ImageData.prototype.putImageData = function (buf, cx, cy) { + for (var dx = 0; dx < buf.width; dx++) { + for (var dy = 0; dy < buf.height; dy++) { + var i1 = (dx + cx) * 4 + (dy + cy) * 4 * this.width; + var i2 = dx * 4 + dy * 4 * buf.width; + this.data[i1] = buf.data[i2]; + this.data[i1 + 1] = buf.data[i2 + 1]; + this.data[i1 + 2] = buf.data[i2 + 2]; + this.data[i1 + 3] = buf.data[i2 + 3]; + } + } +}; +exports.ImageData.prototype.pixelOffset = function (x, y) { + return x * 4 + y * this.width * 4; +}; +//creates a hash of a portion of the buffer used to check for changes +exports.ImageData.prototype.getPixelHash = function (rect) { + if (!rect) { + rect = new a1lib.Rect(0, 0, this.width, this.height); + } + var hash = 0; + for (var x = rect.x; x < rect.x + rect.width; x++) { + for (var y = rect.y; y < rect.y + rect.height; y++) { + var i = x * 4 + y * 4 * this.width; + hash = (((hash << 5) - hash) + this.data[i]) | 0; + hash = (((hash << 5) - hash) + this.data[i + 1]) | 0; + hash = (((hash << 5) - hash) + this.data[i + 2]) | 0; + hash = (((hash << 5) - hash) + this.data[i + 3]) | 0; + } + } + return hash; +}; +exports.ImageData.prototype.clone = function (rect) { + return this.toImage(rect).getContext("2d").getImageData(0, 0, rect.width, rect.height); +}; +exports.ImageData.prototype.show = function (x = 5, y = 5, zoom = 1) { + if (typeof document == "undefined") { + console.error("need a document to show an imagedata object"); + return; + } + var imgs = document.getElementsByClassName("debugimage"); + while (imgs.length > exports.ImageData.prototype.show.maxImages) { + imgs[0].remove(); + } + var el = this.toImage(); + el.classList.add("debugimage"); + el.style.position = "absolute"; + el.style.zIndex = "1000"; + el.style.left = x / zoom + "px"; + el.style.top = y / zoom + "px"; + el.style.background = "purple"; + el.style.cursor = "pointer"; + el.style.imageRendering = "pixelated"; + el.style.outline = "1px solid #0f0"; + el.style.width = (this.width == 1 ? 100 : this.width) * zoom + "px"; + el.style.height = (this.height == 1 ? 100 : this.height) * zoom + "px"; + el.onclick = function () { el.remove(); }; + document.body.appendChild(el); + return el; +}; +exports.ImageData.prototype.show.maxImages = 10; +exports.ImageData.prototype.toImage = function (rect) { + if (!rect) { + rect = new a1lib.Rect(0, 0, this.width, this.height); + } + if (typeof document != "undefined") { + var el = document.createElement("canvas"); + el.width = rect.width; + el.height = rect.height; + } + else { + el = nodeimports.createCanvas(rect.width, rect.height); + } + var ctx = el.getContext("2d"); + ctx.putImageData(this.toDrawableData(), -rect.x, -rect.y); + return el; +}; +exports.ImageData.prototype.getPixel = function (x, y) { + var i = x * 4 + y * 4 * this.width; + return [this.data[i], this.data[i + 1], this.data[i + 2], this.data[i + 3]]; +}; +exports.ImageData.prototype.getPixelValueSum = function (x, y) { + var i = x * 4 + y * 4 * this.width; + return this.data[i] + this.data[i + 1] + this.data[i + 2]; +}; +exports.ImageData.prototype.getPixelInt = function (x, y) { + var i = x * 4 + y * 4 * this.width; + return (this.data[i + 3] << 24) + (this.data[i + 0] << 16) + (this.data[i + 1] << 8) + (this.data[i + 2] << 0); +}; +exports.ImageData.prototype.getColorDifference = function (x, y, r, g, b, a = 255) { + var i = x * 4 + y * 4 * this.width; + return Math.abs(this.data[i] - r) + Math.abs(this.data[i + 1] - g) + Math.abs(this.data[i + 2] - b) * a / 255; +}; +exports.ImageData.prototype.setPixel = function (x, y, ...color) { + var r, g, b, a; + var [r, g, b, a] = (Array.isArray(color[0]) ? color[0] : color); + var i = x * 4 + y * 4 * this.width; + this.data[i] = r; + this.data[i + 1] = g; + this.data[i + 2] = b; + this.data[i + 3] = a == undefined ? 255 : a; +}; +exports.ImageData.prototype.setPixelInt = function (x, y, color) { + var i = x * 4 + y * 4 * this.width; + this.data[i] = (color >> 24) & 0xff; + this.data[i + 1] = (color >> 16) & 0xff; + this.data[i + 2] = (color >> 8) & 0xff; + this.data[i + 3] = (color >> 0) & 0xff; +}; +exports.ImageData.prototype.toFileBytes = function (format, quality) { + if (typeof HTMLCanvasElement != "undefined") { + return new Promise(d => this.toImage().toBlob(b => { + var r = new FileReader(); + r.readAsArrayBuffer(b); + r.onload = () => d(new Uint8Array(r.result)); + }, format, quality)); + } + else { + return nodeimports.imageDataToFileBytes(this, format, quality); + } +}; +exports.ImageData.prototype.toPngBase64 = function () { + if (typeof HTMLCanvasElement != "undefined") { + var str = this.toImage().toDataURL("image/png"); + return str.slice(str.indexOf(",") + 1); + } + else { + throw new Error("synchronous image conversion not supported in nodejs, try using ImageData.prototype.toFileBytes"); + } +}; +exports.ImageData.prototype.pixelCompare = function (buf, x = 0, y = 0, max) { + return a1lib.ImageDetect.simpleCompare(this, buf, x, y, max); +}; +exports.ImageData.prototype.copyTo = function (target, sourcex, sourcey, width, height, targetx, targety) { + //convince v8 that these are 31bit uints + const targetwidth = target.width | 0; + const thiswidth = this.width | 0; + const copywidth = width | 0; + const fastwidth = Math.floor(width / 4) * 4; + const thisdata = new Int32Array(this.data.buffer, this.data.byteOffset, this.data.byteLength / 4); + const targetdata = new Int32Array(target.data.buffer, target.data.byteOffset, target.data.byteLength / 4); + for (let cy = 0; cy < height; cy++) { + let cx = 0; + let it = (cx + targetx) + (cy + targety) * targetwidth; + let is = (cx + sourcex) + (cy + sourcey) * thiswidth; + //copy 4 pixels per iter (xmm) + for (; cx < fastwidth; cx += 4) { + targetdata[it] = thisdata[is]; + targetdata[it + 1] = thisdata[is + 1]; + targetdata[it + 2] = thisdata[is + 2]; + targetdata[it + 3] = thisdata[is + 3]; + it += 4; + is += 4; + } + //copy remainder per pixel + for (; cx < copywidth; cx++) { + targetdata[it] = thisdata[is]; + it += 1; + is += 1; + } + } +}; +if (typeof HTMLImageElement != "undefined") { + HTMLImageElement.prototype.toBuffer = function (x = 0, y = 0, w = this.width, h = this.height) { + var cnv = document.createElement("canvas"); + cnv.width = w; + cnv.height = h; + var ctx = cnv.getContext("2d"); + ctx.drawImage(this, -x, -y); + return ctx.getImageData(0, 0, w, h); + }; + HTMLImageElement.prototype.toCanvas = function (x = 0, y = 0, w = this.width, h = this.height) { + var cnv = document.createElement("canvas"); + cnv.width = w; + cnv.height = h; + var ctx = cnv.getContext("2d"); + ctx.drawImage(this, -x, -y); + return cnv; + }; +} + + +/***/ }), + +/***/ "./src/base/imagedetect.ts": +/*!*********************************!*\ + !*** ./src/base/imagedetect.ts ***! + \*********************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_15248__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImageDataSet = exports.webpackImages = exports.asyncMap = exports.coldif = exports.simpleCompareRMSE = exports.simpleCompare = exports.findSubbuffer = exports.findSubimage = exports.clearPngColorspace = exports.isPngBuffer = exports.imageDataFromFileBuffer = exports.imageDataFromBase64 = exports.imageDataFromUrl = void 0; +const imgref_1 = __nested_webpack_require_15248__(/*! ./imgref */ "./src/base/imgref.ts"); +const wapper = __importStar(__nested_webpack_require_15248__(/*! ./wrapper */ "./src/base/wrapper.ts")); +const nodeimports = __importStar(__nested_webpack_require_15248__(/*! ./nodepolyfill */ "./src/base/nodepolyfill.ts")); +const _1 = __nested_webpack_require_15248__(/*! . */ "./src/base/index.ts"); +/** +* Downloads an image and returns the ImageData +* Make sure the png image does not have a sRGB chunk or the resulting pixels will differ for different users!!! +* @param url http(s) or data url to the image +*/ +async function imageDataFromUrl(url) { + if (typeof Image != "undefined") { + var img = new Image(); + img.crossOrigin = "crossorigin"; + return await new Promise((done, fail) => { + img.onload = function () { done(img.toBuffer()); }; + img.onerror = fail; + img.src = url; + }); + } + else { + var hdr = "data:image/png;base64,"; + if (url.startsWith(hdr)) { + return imageDataFromBase64(url.slice(hdr.length)); + } + throw new Error("loading remote images in nodejs has been disabled, load the raw bytes and use imageDataFromNodeBuffer instead"); + } +} +exports.imageDataFromUrl = imageDataFromUrl; +/** +* Loads an ImageData object from a base64 encoded png image +* Make sure the png image does not have a sRGB chunk or the resulting pixels will differ for different users!!! +* @param data a base64 encoded png image +*/ +async function imageDataFromBase64(data) { + if (typeof Image != "undefined") { + return imageDataFromUrl("data:image/png;base64," + data); + } + else { + return nodeimports.imageDataFromBase64(data); + } +} +exports.imageDataFromBase64 = imageDataFromBase64; +/** + * Loads an ImageData object directly from a png encoded file buffer + * This method ensures that png color space headers are taken care off + * @param data The bytes of a png file + */ +async function imageDataFromFileBuffer(data) { + clearPngColorspace(data); + if (typeof Image != "undefined") { + let blob = new Blob([data], { type: "image/png" }); + let url = URL.createObjectURL(blob); + let r = await imageDataFromUrl(url); + URL.revokeObjectURL(url); + return r; + } + else { + return nodeimports.imageDataFromBuffer(data); + } +} +exports.imageDataFromFileBuffer = imageDataFromFileBuffer; +/** +* Checks if a given byte array is a png file (by checking for ?PNG as first 4 bytes) +* @param bytes Raw bytes of the png file +*/ +function isPngBuffer(bytes) { + return bytes[0] == 137 && bytes[1] == 80 && bytes[2] == 78 && bytes[3] == 71; +} +exports.isPngBuffer = isPngBuffer; +/** +* Resets the colorspace data in the png file. +* This makes sure the browser renders the exact colors in the file instead of filtering it in order to obtain the best real life representation of +* what it looked like on the authors screen. (this feature is often broken and not supported) +* For example a round trip printscreen -> open in browser results in different colors than the original +* @param data Raw bytes of the png file +*/ +function clearPngColorspace(data) { + if (!isPngBuffer(data)) { + throw new Error("non-png image received"); + } + var i = 8; + while (i < data.length) { + var length = data[i++] * 0x1000000 + data[i++] * 0x10000 + data[i++] * 0x100 + data[i++]; + var ancillary = !!((data[i] >> 5) & 1); + var chunkname = String.fromCharCode(data[i], data[i + 1], data[i + 2], data[i + 3]); + var chunkid = chunkname.toLowerCase(); + if (chunkid != "trns" && ancillary) { + data[i + 0] = "n".charCodeAt(0); + data[i + 1] = "o".charCodeAt(0); + data[i + 2] = "P".charCodeAt(0); + data[i + 3] = "E".charCodeAt(0); + //calculate new chunk checksum + //http://www.libpng.org/pub/png/spec/1.2/PNG-CRCAppendix.html + var end = i + 4 + length; + var crc = 0xffffffff; + //should be fast enough like this + var bitcrc = function (bit) { + for (var k = 0; k < 8; k++) { + if (bit & 1) { + bit = 0xedb88320 ^ (bit >>> 1); + } + else { + bit = bit >>> 1; + } + } + return bit; + }; + for (var a = i; a < end; a++) { + if (a >= i + 4) { + data[a] = 0; + } + var bit = data[a]; + crc = bitcrc((crc ^ bit) & 0xff) ^ (crc >>> 8); + } + crc = crc ^ 0xffffffff; + //new chunk checksum + data[i + 4 + length + 0] = (crc >> 24) & 0xff; + data[i + 4 + length + 1] = (crc >> 16) & 0xff; + data[i + 4 + length + 2] = (crc >> 8) & 0xff; + data[i + 4 + length + 3] = (crc >> 0) & 0xff; + } + if (chunkname == "IEND") { + break; + } + i += 4; //type + i += length; //data + i += 4; //crc + } +} +exports.clearPngColorspace = clearPngColorspace; +/** +* finds the given needle ImageBuffer in the given haystack ImgRef this function uses the best optimized available +* code depending on the type of the haystack. It will use fast c# searching if the haystack is an ImgRefBind, js searching +* is used otherwise. +* the checklist argument is no longer used and should ignored or null/undefined +* The optional sx,sy,sw,sh arguments indicate a bounding rectangle in which to search the needle. The rectangle should be bigger than the needle +* @returns An array of points where the needle is found. The array is empty if none are found +*/ +function findSubimage(haystackImgref, needleBuffer, sx = 0, sy = 0, sw = haystackImgref.width, sh = haystackImgref.height) { + if (!haystackImgref) { + throw new TypeError(); + } + if (!needleBuffer) { + throw new TypeError(); + } + var max = 30; + //check if we can do this in alt1 + if (haystackImgref instanceof imgref_1.ImgRefBind && wapper.hasAlt1 && alt1.bindFindSubImg) { + var needlestr = wapper.encodeImageString(needleBuffer); + var r = alt1.bindFindSubImg(haystackImgref.handle, needlestr, needleBuffer.width, sx, sy, sw, sh); + if (!r) { + throw new wapper.Alt1Error(); + } + return JSON.parse(r); + } + return findSubbuffer(haystackImgref.read(), needleBuffer, sx, sy, sw, sh); +} +exports.findSubimage = findSubimage; +/** +* Uses js to find the given needle ImageBuffer in the given haystack ImageBuffer. It is better to use the alt1.bind- functions in +* combination with a1nxt.findsubimg. +* the optional sx,sy,sw,sh arguments indicate a bounding rectangle in which to search. +* @returns An array of points where the needle is found. The array is empty if none are found +*/ +function findSubbuffer(haystack, needle, sx = 0, sy = 0, sw = haystack.width, sh = haystack.height) { + var r = []; + var maxdif = 30; + var maxresults = 50; + var needlestride = needle.width * 4; + var heystackstride = haystack.width * 4; + //built list of non trans pixel to check + var checkList = []; + for (var y = 0; y < needle.height; y++) { + for (var x = 0; x < needle.width; x++) { + var i = x * 4 + y * needlestride; + if (needle.data[i + 3] == 255) { + checkList.push({ x: x, y: y }); + } + if (checkList.length == 10) { + break; + } + } + if (checkList.length == 10) { + break; + } + } + var cw = (sx + sw) - needle.width; + var ch = (sy + sh) - needle.height; + var checklength = checkList.length; + for (var y = sy; y <= ch; y++) { + outer: for (var x = sx; x <= cw; x++) { + for (var a = 0; a < checklength; a++) { + var i1 = (x + checkList[a].x) * 4 + (y + checkList[a].y) * heystackstride; + var i2 = checkList[a].x * 4 + checkList[a].y * needlestride; + var d = 0; + d = d + Math.abs(haystack.data[i1 + 0] - needle.data[i2 + 0]) | 0; + d = d + Math.abs(haystack.data[i1 + 1] - needle.data[i2 + 1]) | 0; + d = d + Math.abs(haystack.data[i1 + 2] - needle.data[i2 + 2]) | 0; + d *= 255 / needle.data[i2 + 3]; + if (d > maxdif) { + continue outer; + } + } + if (simpleCompare(haystack, needle, x, y, maxdif) != Infinity) { + r.push({ x, y }); + if (r.length > maxresults) { + return r; + } + } + } + } + return r; +} +exports.findSubbuffer = findSubbuffer; +/** +* Compares two images and returns the average color difference per pixel between them +* @param max The max color difference at any point in the image before short circuiting the function and returning Infinity. set to -1 to always continue. +* @returns The average color difference per pixel or Infinity if the difference is more than max at any point in the image +*/ +function simpleCompare(bigbuf, checkbuf, x, y, max = 30) { + if (x < 0 || y < 0) { + throw new RangeError(); + } + if (x + checkbuf.width > bigbuf.width || y + checkbuf.height > bigbuf.height) { + throw new RangeError(); + } + if (max == -1) { + max = 255 * 4; + } + var dif = 0; + for (var step = 8; step >= 1; step /= 2) { + for (var cx = 0; cx < checkbuf.width; cx += step) { + for (var cy = 0; cy < checkbuf.height; cy += step) { + var i1 = (x + cx) * 4 + (y + cy) * bigbuf.width * 4; + var i2 = cx * 4 + cy * checkbuf.width * 4; + var d = 0; + d = d + Math.abs(bigbuf.data[i1 + 0] - checkbuf.data[i2 + 0]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 1] - checkbuf.data[i2 + 1]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 2] - checkbuf.data[i2 + 2]) | 0; + d *= checkbuf.data[i2 + 3] / 255; + if (step == 1) { + dif += d; + } + if (d > max) { + return Infinity; + } + } + } + } + return dif / checkbuf.width / checkbuf.height; +} +exports.simpleCompare = simpleCompare; +/** +* Calculates the root mean square error between the two buffers at the given coordinate, this method can be used in situations with significant blur or +* transparency, it does not bail early on non-matching images like simpleCompare does so it can be expected to be much slower when called often. +* @returns The root mean square error beteen the images, high single pixel errors are penalized more than consisten low errors. return of 0 means perfect match. +*/ +function simpleCompareRMSE(bigbuf, checkbuf, x, y) { + if (x < 0 || y < 0) { + throw new RangeError(); + } + if (x + checkbuf.width > bigbuf.width || y + checkbuf.height > bigbuf.height) { + throw new RangeError(); + } + var dif = 0; + var numpix = 0; + for (var cx = 0; cx < checkbuf.width; cx++) { + for (var cy = 0; cy < checkbuf.height; cy++) { + var i1 = (x + cx) * 4 + (y + cy) * bigbuf.width * 4; + var i2 = cx * 4 + cy * checkbuf.width * 4; + var d = 0; + d = d + Math.abs(bigbuf.data[i1 + 0] - checkbuf.data[i2 + 0]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 1] - checkbuf.data[i2 + 1]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 2] - checkbuf.data[i2 + 2]) | 0; + var weight = checkbuf.data[i2 + 3] / 255; + numpix += weight; + dif += d * d * weight; + } + } + return Math.sqrt(dif / numpix); +} +exports.simpleCompareRMSE = simpleCompareRMSE; +/** +* Returns the difference between two colors (scaled to the alpha of the second color) +*/ +function coldif(r1, g1, b1, r2, g2, b2, a2) { + return (Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2)) * a2 / 255; //only applies alpha for 2nd buffer! +} +exports.coldif = coldif; +/** + * Turns map of promises into a map that contains the resolved values after loading. + * @param input + */ +function asyncMap(input) { + var raw = {}; + var promises = []; + for (var a in input) { + if (input.hasOwnProperty(a)) { + raw[a] = null; + promises.push(input[a].then(function (a, i) { raw[a] = i; r[a] = i; }.bind(null, a))); + } + } + var r = {}; + var promise = Promise.all(promises).then(() => { r.loaded = true; return r; }); + Object.defineProperty(r, "loaded", { enumerable: false, value: false, writable: true }); + Object.defineProperty(r, "promise", { enumerable: false, value: promise }); + Object.defineProperty(r, "raw", { enumerable: false, value: raw }); + return Object.assign(r, raw); +} +exports.asyncMap = asyncMap; +/** +* Same as asyncMap, but casts the properties to ImageData in typescript +*/ +function webpackImages(input) { + return asyncMap(input); +} +exports.webpackImages = webpackImages; +class ImageDataSet { + constructor() { + this.buffers = []; + } + matchBest(img, x, y, max) { + let best = null; + let bestscore = max; + for (let a = 0; a < this.buffers.length; a++) { + let score = img.pixelCompare(this.buffers[a], x, y, bestscore); + if (isFinite(score) && (bestscore == undefined || score < bestscore)) { + bestscore = score; + best = a; + } + } + if (best == null) { + return null; + } + return { index: best, score: bestscore }; + } + static fromFilmStrip(baseimg, width) { + if ((baseimg.width % width) != 0) { + throw new Error("slice size does not fit in base img"); + } + let r = new ImageDataSet(); + for (let x = 0; x < baseimg.width; x += width) { + r.buffers.push(baseimg.clone(new _1.Rect(x, 0, width, baseimg.height))); + } + return r; + } + static fromFilmStripUneven(baseimg, widths) { + let r = new ImageDataSet(); + let x = 0; + for (let w of widths) { + r.buffers.push(baseimg.clone(new _1.Rect(x, 0, w, baseimg.height))); + x += w; + if (x > baseimg.width) { + throw new Error("sampling filmstrip outside bounds"); + } + } + if (x != baseimg.width) { + throw new Error("unconsumed pixels left in film strip imagedata"); + } + return r; + } + static fromAtlas(baseimg, slices) { + let r = new ImageDataSet(); + for (let slice of slices) { + r.buffers.push(baseimg.clone(slice)); + } + return r; + } +} +exports.ImageDataSet = ImageDataSet; + + +/***/ }), + +/***/ "./src/base/imgref.ts": +/*!****************************!*\ + !*** ./src/base/imgref.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, exports, __nested_webpack_require_31629__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImgRefData = exports.ImgRefBind = exports.ImgRefCtx = exports.ImgRef = void 0; +const index_1 = __nested_webpack_require_31629__(/*! ./index */ "./src/base/index.ts"); +/** + * Represents an image that might be in different types of memory + * This is mostly used to represent images still in Alt1 memory that have + * not been transfered to js yet. Various a1lib api's use this type and + * choose the most efficient approach based on the memory type + */ +class ImgRef { + constructor(x, y, w, h) { + this.t = "none"; + this.x = x; + this.y = y; + this.width = w; + this.height = h; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + throw new Error("This imgref (" + this.t + ") does not support toData"); + } + findSubimage(needle, sx = 0, sy = 0, w = this.width, h = this.height) { + return index_1.ImageDetect.findSubimage(this, needle, sx, sy, w, h); + } + toData(x = this.x, y = this.y, w = this.width, h = this.height) { + return this.read(x - this.x, y - this.y, w, h); + } + ; + containsArea(rect) { + return this.x <= rect.x && this.y <= rect.y && this.x + this.width >= rect.x + rect.width && this.y + this.height >= rect.y + rect.height; + } +} +exports.ImgRef = ImgRef; +/** + * Represents an image in js render memory (canvas/image tag) + */ +class ImgRefCtx extends ImgRef { + constructor(img, x = 0, y = 0) { + if (img instanceof CanvasRenderingContext2D) { + super(x, y, img.canvas.width, img.canvas.height); + this.ctx = img; + } + else { + super(x, y, img.width, img.height); + var cnv = (img instanceof HTMLCanvasElement ? img : img.toCanvas()); + this.ctx = cnv.getContext("2d"); + } + this.t = "ctx"; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + return this.ctx.getImageData(x, y, w, h); + } +} +exports.ImgRefCtx = ImgRefCtx; +/** + * Represents in image in Alt1 memory, This type of image can be searched for subimages + * very efficiently and transfering the full image to js can be avoided this way + */ +class ImgRefBind extends ImgRef { + constructor(handle, x = 0, y = 0, w = 0, h = 0) { + super(x, y, w, h); + this.handle = handle; + this.t = "bind"; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + return (0, index_1.transferImageData)(this.handle, x, y, w, h); + } +} +exports.ImgRefBind = ImgRefBind; +/** + * Represents an image in js memory + */ +class ImgRefData extends ImgRef { + constructor(buf, x = 0, y = 0) { + super(x, y, buf.width, buf.height); + this.buf = buf; + this.t = "data"; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + if (x == 0 && y == 0 && w == this.width && h == this.height) { + return this.buf; + } + var r = new ImageData(w, h); + for (var b = y; b < y + h; b++) { + for (var a = x; a < x + w; a++) { + var i1 = (a - x) * 4 + (b - y) * w * 4; + var i2 = a * 4 + b * 4 * this.buf.width; + r.data[i1] = this.buf.data[i2]; + r.data[i1 + 1] = this.buf.data[i2 + 1]; + r.data[i1 + 2] = this.buf.data[i2 + 2]; + r.data[i1 + 3] = this.buf.data[i2 + 3]; + } + } + return r; + } +} +exports.ImgRefData = ImgRefData; + + +/***/ }), + +/***/ "./src/base/index.ts": +/*!***************************!*\ + !*** ./src/base/index.ts ***! + \***************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_35283__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImageDataSet = exports.findSubbuffer = exports.simpleCompare = exports.findSubimage = exports.webpackImages = exports.NodePolyfill = exports.ImageData = exports.Rect = exports.PasteInput = exports.ImageDetect = void 0; +__nested_webpack_require_35283__(/*! ./declarations */ "./src/base/declarations.ts"); +exports.ImageDetect = __importStar(__nested_webpack_require_35283__(/*! ./imagedetect */ "./src/base/imagedetect.ts")); +exports.PasteInput = __importStar(__nested_webpack_require_35283__(/*! ./pasteinput */ "./src/base/pasteinput.ts")); +var rect_1 = __nested_webpack_require_35283__(/*! ./rect */ "./src/base/rect.ts"); +Object.defineProperty(exports, "Rect", ({ enumerable: true, get: function () { return __importDefault(rect_1).default; } })); +var imagedata_extensions_1 = __nested_webpack_require_35283__(/*! ./imagedata-extensions */ "./src/base/imagedata-extensions.ts"); +Object.defineProperty(exports, "ImageData", ({ enumerable: true, get: function () { return imagedata_extensions_1.ImageData; } })); +exports.NodePolyfill = __importStar(__nested_webpack_require_35283__(/*! ./nodepolyfill */ "./src/base/nodepolyfill.ts")); +__exportStar(__nested_webpack_require_35283__(/*! ./imgref */ "./src/base/imgref.ts"), exports); +__exportStar(__nested_webpack_require_35283__(/*! ./wrapper */ "./src/base/wrapper.ts"), exports); +var imagedetect_1 = __nested_webpack_require_35283__(/*! ./imagedetect */ "./src/base/imagedetect.ts"); +Object.defineProperty(exports, "webpackImages", ({ enumerable: true, get: function () { return imagedetect_1.webpackImages; } })); +Object.defineProperty(exports, "findSubimage", ({ enumerable: true, get: function () { return imagedetect_1.findSubimage; } })); +Object.defineProperty(exports, "simpleCompare", ({ enumerable: true, get: function () { return imagedetect_1.simpleCompare; } })); +Object.defineProperty(exports, "findSubbuffer", ({ enumerable: true, get: function () { return imagedetect_1.findSubbuffer; } })); +Object.defineProperty(exports, "ImageDataSet", ({ enumerable: true, get: function () { return imagedetect_1.ImageDataSet; } })); + + +/***/ }), + +/***/ "./src/base/nodepolyfill.ts": +/*!**********************************!*\ + !*** ./src/base/nodepolyfill.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports, __nested_webpack_require_38931__) => { + + +//nodejs and electron polyfills for web api's +//commented out type info as that breaks webpack with optional dependencies +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.imageDataFromBuffer = exports.imageDataFromBase64 = exports.imageDataToFileBytes = exports.createCanvas = exports.imageDataToDrawable = exports.requireElectronCommon = exports.requireNodeCanvas = exports.requireSharp = exports.polyfillRequire = void 0; +const index_1 = __nested_webpack_require_38931__(/*! ./index */ "./src/base/index.ts"); +const imagedetect_1 = __nested_webpack_require_38931__(/*! ./imagedetect */ "./src/base/imagedetect.ts"); +var requirefunction = null; +/** + * Call this function to let the libs require extra dependencies on nodejs in order + * to polyfill some browser api's (mostly image compression/decompression) + * `NodePolifill.polyfillRequire(require);` should solve most cases + */ +function polyfillRequire(requirefn) { + requirefunction = requirefn; +} +exports.polyfillRequire = polyfillRequire; +function requireSharp() { + try { + if (requirefunction) { + return requirefunction("sharp"); + } + else { + return __nested_webpack_require_38931__(/* webpackIgnore: true */ /*! sharp */ "sharp"); // as typeof import("sharp"); + } + } + catch (e) { } + return null; +} +exports.requireSharp = requireSharp; +function requireNodeCanvas() { + //attempt to require sharp first, after loading canvas the module sharp fails to load + requireSharp(); + try { + if (requirefunction) { + return requirefunction("canvas"); + } + else { + return __nested_webpack_require_38931__(/* webpackIgnore: true */ /*! canvas */ "canvas"); // as typeof import("sharp"); + } + } + catch (e) { } + return null; +} +exports.requireNodeCanvas = requireNodeCanvas; +function requireElectronCommon() { + try { + if (requirefunction) { + return requirefunction("electron/common"); + } + else { + return __nested_webpack_require_38931__(/* webpackIgnore: true */ /*! electron/common */ "electron/common"); + } + } + catch (e) { } + return null; +} +exports.requireElectronCommon = requireElectronCommon; +function imageDataToDrawable(buf) { + let nodecnv = requireNodeCanvas(); + if (!nodecnv) { + throw new Error("couldn't find built-in canvas or the module 'canvas'"); + } + return new nodecnv.ImageData(buf.data, buf.width, buf.height); +} +exports.imageDataToDrawable = imageDataToDrawable; +function createCanvas(w, h) { + let nodecnv = requireNodeCanvas(); + if (!nodecnv) { + throw new Error("couldn't find built-in canvas or the module 'canvas'"); + } + return nodecnv.createCanvas(w, h); +} +exports.createCanvas = createCanvas; +function flipBGRAtoRGBA(data) { + for (let i = 0; i < data.length; i += 4) { + let tmp = data[i + 2]; + data[i + 2] = data[i + 0]; + data[i + 0] = tmp; + } +} +async function imageDataToFileBytes(buf, format, quality) { + //use the electron API if we're in electron + var electronCommon; + var sharp; + if (electronCommon = requireElectronCommon()) { + let nativeImage = electronCommon.nativeImage; + //need to copy the buffer in order to flip it without destroying the original + let bufcpy = Buffer.from(buf.data.slice(buf.data.byteOffset, buf.data.byteLength)); + flipBGRAtoRGBA(bufcpy); + let nativeimg = nativeImage.createFromBitmap(bufcpy, { width: buf.width, height: buf.height }); + return nativeimg.toPNG(); + } + else if (sharp = requireSharp()) { + let img = sharp(Buffer.from(buf.data.buffer), { raw: { width: buf.width, height: buf.height, channels: 4 } }); + if (format == "image/png") { + img.png(); + } + else if (format == "image/webp") { + var opts = { quality: 80 }; + if (typeof quality == "number") { + opts.quality = quality * 100; + } + img.webp(opts); + } + else { + throw new Error("unknown image format: " + format); + } + return await img.toBuffer({ resolveWithObject: false }).buffer; + } + throw new Error("coulnd't find build-in image compression methods or the module 'electron/common' or 'sharp'"); +} +exports.imageDataToFileBytes = imageDataToFileBytes; +function imageDataFromBase64(base64) { + return imageDataFromBuffer(Buffer.from(base64, "base64")); +} +exports.imageDataFromBase64 = imageDataFromBase64; +async function imageDataFromBuffer(buffer) { + (0, imagedetect_1.clearPngColorspace)(buffer); + //use the electron API if we're in electron + var electronCommon; + var nodecnv; + if (electronCommon = requireElectronCommon()) { + let nativeImage = electronCommon.nativeImage; + let img = nativeImage.createFromBuffer(buffer); + let pixels = img.toBitmap(); + let size = img.getSize(); + let pixbuf = new Uint8ClampedArray(pixels.buffer, pixels.byteOffset, pixels.byteLength); + flipBGRAtoRGBA(pixbuf); + return new index_1.ImageData(pixbuf, size.width, size.height); + } + else if (nodecnv = requireNodeCanvas()) { + return new Promise((done, err) => { + let img = new nodecnv.Image(); + img.onerror = err; + img.onload = () => { + var cnv = nodecnv.createCanvas(img.naturalWidth, img.naturalHeight); + var ctx = cnv.getContext("2d"); + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, img.naturalWidth, img.naturalHeight); + //use our own class + done(new index_1.ImageData(data.data, data.width, data.height)); + }; + img.src = Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength); + }); + } + throw new Error("couldn't find built-in canvas, module 'electron/common' or the module 'canvas'"); +} +exports.imageDataFromBuffer = imageDataFromBuffer; + + +/***/ }), + +/***/ "./src/base/pasteinput.ts": +/*!********************************!*\ + !*** ./src/base/pasteinput.ts ***! + \********************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_45123__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.fileDialog = exports.start = exports.startDragNDrop = exports.triggerPaste = exports.unlisten = exports.listen = exports.lastref = void 0; +const index_1 = __nested_webpack_require_45123__(/*! ./index */ "./src/base/index.ts"); +const ImageDetect = __importStar(__nested_webpack_require_45123__(/*! ./imagedetect */ "./src/base/imagedetect.ts")); +var listeners = []; +var started = false; +var dndStarted = false; +var pasting = false; +exports.lastref = null; +function listen(func, errorfunc, dragndrop) { + listeners.push({ cb: func, error: errorfunc }); + if (!started) { + start(); + } + if (dragndrop && !dndStarted) { + startDragNDrop(); + } +} +exports.listen = listen; +function unlisten(func) { + let i = listeners.findIndex(c => c.cb == func); + if (i != -1) { + listeners.splice(i, 1); + } +} +exports.unlisten = unlisten; +/** + * currently used in multiple document situations (iframe), might be removed in the future + */ +function triggerPaste(img) { + exports.lastref = img; + for (var a in listeners) { + listeners[a].cb(exports.lastref); + } +} +exports.triggerPaste = triggerPaste; +function pasted(img) { + pasting = false; + let cnv = img instanceof HTMLCanvasElement ? img : img.toCanvas(); + triggerPaste(new index_1.ImgRefCtx(cnv)); +} +function error(error, mes) { + var _a, _b; + pasting = false; + for (var a in listeners) { + (_b = (_a = listeners[a]).error) === null || _b === void 0 ? void 0 : _b.call(_a, mes, error); + } +} +function startDragNDrop() { + var getitem = function (items) { + var foundimage = ""; + for (var a = 0; a < items.length; a++) { + var item = items[a]; + var m = item.type.match(/^image\/(\w+)$/); + if (m) { + if (m[1] == "png") { + return item; + } + else { + foundimage = m[1]; + } + } + } + if (foundimage) { + error("notpng", "The image you uploaded is not a .png image. Other image type have compression noise and can't be used for image detection."); + } + return null; + }; + window.addEventListener("dragover", function (e) { + e.preventDefault(); + }); + window.addEventListener("drop", function (e) { + if (!e.dataTransfer) { + return; + } + var item = getitem(e.dataTransfer.items); + e.preventDefault(); + if (!item) { + return; + } + fromFile(item.getAsFile()); + }); +} +exports.startDragNDrop = startDragNDrop; +function start() { + if (started) { + return; + } + started = true; + //determine if we have a clipboard api + //try{a=new Event("clipboard"); a="clipboardData" in a;} + //catch(e){a=false;} + var ischrome = !!navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match(/Edge/); + //old method breaks after chrome 41, revert to good old user agent sniffing + //nvm, internet explorer (edge) decided that it wants to be chrome, however fails at delivering + //turns out this one is interesting, edge is a hybrid between the paste api's + var apipasted = function (e) { + if (!e.clipboardData) { + return; + } + for (var a = 0; a < e.clipboardData.items.length; a++) { //loop all data types + if (e.clipboardData.items[a].type.indexOf("image") != -1) { + var file = e.clipboardData.items[a].getAsFile(); + if (file) { + var img = new Image(); + img.src = (window.URL || window.webkitURL).createObjectURL(file); + if (img.width > 0) { + pasted(img); + } + else { + img.onload = function () { pasted(img); }; + } + } + } + } + }; + if (ischrome) { + document.addEventListener("paste", apipasted); + } + else { + var catcher = document.createElement("div"); + catcher.setAttribute("contenteditable", ""); + catcher.className = "forcehidden"; //retarded ie safety/bug, cant apply styles using js//TODO i don't even know what's going on + catcher.onpaste = function (e) { + if (e.clipboardData && e.clipboardData.items) { + apipasted(e); + return; + } + setTimeout(function () { + var b = catcher.children[0]; + if (!b || b.tagName != "IMG") { + return; + } + var img = new Image(); + img.src = b.src; + var a = img.src.match(/^data:([\w\/]+);/); + if (img.width > 0) { + pasted(img); + } + else { + img.onload = function () { pasted(img); }; + } + catcher.innerHTML = ""; + }, 1); + }; + document.body.appendChild(catcher); + } + //detect if ctrl-v is pressed and focus catcher if needed + document.addEventListener("keydown", function (e) { + if (e.target.tagName == "INPUT") { + return; + } + if (e.keyCode != "V".charCodeAt(0) || !e.ctrlKey) { + return; + } + pasting = true; + setTimeout(function () { + if (pasting) { + error("noimg", "You pressed Ctrl+V, but no image was pasted by your browser, make sure your clipboard contains an image, and not a link to an image."); + } + }, 1000); + if (catcher) { + catcher.focus(); + } + }); +} +exports.start = start; +function fileDialog() { + var fileinput = document.createElement("input"); + fileinput.type = "file"; + fileinput.accept = "image/png"; + fileinput.onchange = function () { if (fileinput.files && fileinput.files[0]) { + fromFile(fileinput.files[0]); + } }; + fileinput.click(); + return fileinput; +} +exports.fileDialog = fileDialog; +function fromFile(file) { + if (!file) { + return; + } + var reader = new FileReader(); + reader.onload = function () { + var bytearray = new Uint8Array(reader.result); + if (ImageDetect.isPngBuffer(bytearray)) { + ImageDetect.clearPngColorspace(bytearray); + } + var blob = new Blob([bytearray], { type: "image/png" }); + var img = new Image(); + img.onerror = () => error("invalidfile", "The file you uploaded could not be opened as an image."); + var bloburl = URL.createObjectURL(blob); + img.src = bloburl; + if (img.width > 0) { + pasted(img); + URL.revokeObjectURL(bloburl); + } + else { + img.onload = function () { pasted(img); URL.revokeObjectURL(bloburl); }; + } + }; + reader.readAsArrayBuffer(file); +} + + +/***/ }), + +/***/ "./src/base/rect.ts": +/*!**************************!*\ + !*** ./src/base/rect.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, exports) => { + + +//util class for rectangle maths +//TODO shit this sucks can we remove it again? +//more of a shorthand to get {x,y,width,height} than a class +//kinda starting to like it again +//TODO remove rant +Object.defineProperty(exports, "__esModule", ({ value: true })); +; +/** + * Simple rectangle class with some util functions + */ +class Rect { + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.width = w; + this.height = h; + } + static fromArgs(...args) { + if (typeof args[0] == "object") { + return new Rect(args[0].x, args[0].y, args[0].width, args[0].height); + } + else if (typeof args[0] == "number" && args.length >= 4) { + return new Rect(args[0], args[1], args[2], args[3]); + } + else { + throw new Error("invalid rect args"); + } + } + /** + * Resizes this Rect to include the full size of a given second rectangle + */ + union(r2) { + var x = Math.min(this.x, r2.x); + var y = Math.min(this.y, r2.y); + this.width = Math.max(this.x + this.width, r2.x + r2.width) - x; + this.height = Math.max(this.y + this.height, r2.y + r2.height) - y; + this.x = x; + this.y = y; + return this; + } + /** + * Resizes this Rect to include a given point + */ + includePoint(x, y) { + this.union(new Rect(x, y, 0, 0)); + } + /** + * Grows the rectangle with the given dimensions + */ + inflate(w, h) { + this.x -= w; + this.y -= h; + this.width += 2 * w; + this.height += 2 * h; + } + /** + * Resizes this Rect to the area that overlaps a given Rect + * width and height will be set to 0 if the intersection does not exist + */ + intersect(r2) { + if (this.x < r2.x) { + this.width -= r2.x - this.x; + this.x = r2.x; + } + if (this.y < r2.y) { + this.height -= r2.y - this.y; + this.y = r2.y; + } + this.width = Math.min(this.x + this.width, r2.x + r2.width) - this.x; + this.height = Math.min(this.y + this.height, r2.y + r2.height) - this.y; + if (this.width <= 0 || this.height <= 0) { + this.width = 0; + this.height = 0; + } + } + /** + * Returns wether this Rect has at least one pixel overlap with a given Rect + */ + overlaps(r2) { + return this.x < r2.x + r2.width && this.x + this.width > r2.x && this.y < r2.y + r2.height && this.y + this.height > r2.y; + } + /** + * Returns wether a given Rect fits completely inside this Rect + * @param r2 + */ + contains(r2) { + return this.x <= r2.x && this.x + this.width >= r2.x + r2.width && this.y <= r2.y && this.y + this.height >= r2.y + r2.height; + } + /** + * Returns wether a given point lies inside this Rect + */ + containsPoint(x, y) { + return this.x <= x && this.x + this.width > x && this.y <= y && this.y + this.height > y; + } +} +exports["default"] = Rect; + + +/***/ }), + +/***/ "./src/base/wrapper.ts": +/*!*****************************!*\ + !*** ./src/base/wrapper.ts ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_56486__) { + + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.captureStream = exports.captureMultiAsync = exports.captureAsync = exports.ImageStreamReader = exports.once = exports.removeListener = exports.on = exports.addResizeElement = exports.getMousePosition = exports.hasAlt1Version = exports.resetEnvironment = exports.identifyApp = exports.unmixColor = exports.mixColor = exports.encodeImageString = exports.decodeImageString = exports.transferImageData = exports.captureHoldFullRs = exports.captureHoldScreen = exports.captureHold = exports.capture = exports.getdisplaybounds = exports.requireAlt1 = exports.openbrowser = exports.skinName = exports.hasAlt1 = exports.newestversion = exports.Alt1Error = exports.NoAlt1Error = void 0; +const rect_1 = __importDefault(__nested_webpack_require_56486__(/*! ./rect */ "./src/base/rect.ts")); +const imgref_1 = __nested_webpack_require_56486__(/*! ./imgref */ "./src/base/imgref.ts"); +const imagedata_extensions_1 = __nested_webpack_require_56486__(/*! ./imagedata-extensions */ "./src/base/imagedata-extensions.ts"); +__nested_webpack_require_56486__(/*! ./alt1api */ "./src/base/alt1api.ts"); +/** + * Thrown when a method is called that can not be used outside of Alt1 + */ +class NoAlt1Error extends Error { + constructor() { + super(); + this.message = "This method can not be ran outside of Alt1"; + } +} +exports.NoAlt1Error = NoAlt1Error; +; +/** + * Thrown when the Alt1 API returns an invalid result + * Errors of a different type are throw when internal Alt1 errors occur + */ +class Alt1Error extends Error { +} +exports.Alt1Error = Alt1Error; +/** + * The latest Alt1 version + */ +exports.newestversion = "1.5.5"; +/** + * Whether the Alt1 API is available + */ +exports.hasAlt1 = (typeof alt1 != "undefined"); +/** + * The name of the Alt1 interface skin. (Always "default" if running in a browser) + */ +exports.skinName = exports.hasAlt1 ? alt1.skinName : "default"; +/** + * Max number of bytes that can be sent by alt1 in one function + * Not completely sure why this number is different than window.alt1.maxtranfer + */ +var maxtransfer = 4000000; +/** + * Open a link in the default browser + * @deprecated use window.open instead + */ +function openbrowser(url) { + if (exports.hasAlt1) { + alt1.openBrowser(url); + } + else { + window.open(url, '_blank'); + } +} +exports.openbrowser = openbrowser; +/** + * Throw if Alt1 API is not available + */ +function requireAlt1() { + if (!exports.hasAlt1) { + throw new NoAlt1Error(); + } +} +exports.requireAlt1 = requireAlt1; +/** + * Returns an object with a rectangle that spans all screens + */ +function getdisplaybounds() { + if (!exports.hasAlt1) { + return false; + } + return new rect_1.default(alt1.screenX, alt1.screenY, alt1.screenWidth, alt1.screenHeight); +} +exports.getdisplaybounds = getdisplaybounds; +/** + * gets an imagebuffer with pixel data about the requested region + */ +function capture(...args) { + //TODO change null return on error into throw instead (x3) + if (!exports.hasAlt1) { + throw new NoAlt1Error(); + } + var rect = rect_1.default.fromArgs(...args); + if (alt1.capture) { + return new imagedata_extensions_1.ImageData(alt1.capture(rect.x, rect.y, rect.width, rect.height), rect.width, rect.height); + } + var buf = new imagedata_extensions_1.ImageData(rect.width, rect.height); + if (rect.width * rect.height * 4 <= maxtransfer) { + var data = alt1.getRegion(rect.x, rect.y, rect.width, rect.height); + if (!data) { + return null; + } + decodeImageString(data, buf, 0, 0, rect.width, rect.height); + } + else { + //split up the request to to exceed the single transfer limit (for now) + var x1 = rect.x; + var ref = alt1.bindRegion(rect.x, rect.y, rect.width, rect.height); + if (ref <= 0) { + return null; + } + while (x1 < rect.x + rect.width) { + var x2 = Math.min(rect.x + rect.width, Math.floor(x1 + (maxtransfer / 4 / rect.height))); + var data = alt1.bindGetRegion(ref, x1, rect.y, x2 - x1, rect.height); + if (!data) { + return null; + } + decodeImageString(data, buf, x1 - rect.x, 0, x2 - x1, rect.height); + x1 = x2; + } + } + return buf; +} +exports.capture = capture; +/** + * Makes alt1 bind an area of the rs client in memory without sending it to the js client + * returns an imgref object which can be used to get pixel data using the imgreftobuf function + * currently only one bind can exist per app and the ref in (v) will always be 1 + */ +function captureHold(x, y, w, h) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + requireAlt1(); + var r = alt1.bindRegion(x, y, w, h); + if (r <= 0) { + throw new Alt1Error("capturehold failed"); + } + return new imgref_1.ImgRefBind(r, x, y, w, h); +} +exports.captureHold = captureHold; +/** + * Same as captureHoldRegion, but captures the screen instead of the rs client. it also uses screen coordinates instead and can capture outside of the rs client + */ +function captureHoldScreen(x, y, w, h) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + requireAlt1(); + var r = alt1.bindScreenRegion(x, y, w, h); + if (r <= 0) { + return false; + } + return new imgref_1.ImgRefBind(r, x, y, w, h); +} +exports.captureHoldScreen = captureHoldScreen; +/** + * bind the full rs window if the rs window can be detected by alt1, otherwise return the full screen + */ +function captureHoldFullRs() { + return captureHold(0, 0, alt1.rsWidth, alt1.rsHeight); +} +exports.captureHoldFullRs = captureHoldFullRs; +/** + * returns a subregion from a bound image + * used internally in imgreftobuf if imgref is a bound image + * @deprecated This should be handled internall by the imgrefbind.toData method + */ +function transferImageData(handle, x, y, w, h) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + requireAlt1(); + if (alt1.bindGetRegionBuffer) { + return new imagedata_extensions_1.ImageData(alt1.bindGetRegionBuffer(handle, x, y, w, h), w, h); + } + var r = new imagedata_extensions_1.ImageData(w, h); + var x1 = x; + while (true) { //split up the request to to exceed the single transfer limit (for now) + var x2 = Math.min(x + w, Math.floor(x1 + (maxtransfer / 4 / h))); + var a = alt1.bindGetRegion(handle, x1, y, x2 - x1, h); + if (!a) { + throw new Alt1Error(); + } + decodeImageString(a, r, x1 - x, 0, x2 - x1, h); + x1 = x2; + if (x1 == x + w) { + break; + } + ; + } + return r; +} +exports.transferImageData = transferImageData; +/** + * decodes a returned string from alt1 to an imagebuffer + */ +function decodeImageString(imagestring, target, x, y, w, h) { + var bin = atob(imagestring); + var bytes = target.data; + w |= 0; + h |= 0; + var offset = 4 * x + 4 * y * target.width; + var target_width = target.width | 0; + for (var a = 0; a < w; a++) { + for (var b = 0; b < h; b++) { + var i1 = (offset + (a * 4 | 0) + (b * target_width * 4 | 0)) | 0; + var i2 = ((a * 4 | 0) + (b * 4 * w | 0)) | 0; + bytes[i1 + 0 | 0] = bin.charCodeAt(i2 + 2 | 0); //fix weird red/blue swap in c# + bytes[i1 + 1 | 0] = bin.charCodeAt(i2 + 1 | 0); + bytes[i1 + 2 | 0] = bin.charCodeAt(i2 + 0 | 0); + bytes[i1 + 3 | 0] = bin.charCodeAt(i2 + 3 | 0); + } + } + return target; +} +exports.decodeImageString = decodeImageString; +/** + * encodes an imagebuffer to a string + */ +function encodeImageString(buf, sx = 0, sy = 0, sw = buf.width, sh = buf.height) { + var raw = ""; + for (var y = sy; y < sy + sh; y++) { + for (var x = sx; x < sx + sw; x++) { + var i = 4 * x + 4 * buf.width * y | 0; + raw += String.fromCharCode(buf.data[i + 2 | 0]); + raw += String.fromCharCode(buf.data[i + 1 | 0]); + raw += String.fromCharCode(buf.data[i + 0 | 0]); + raw += String.fromCharCode(buf.data[i + 3 | 0]); + } + } + return btoa(raw); +} +exports.encodeImageString = encodeImageString; +/** + * mixes the given color into a single int. This format is used by alt1 + */ +function mixColor(r, g, b, a = 255) { + return (b << 0) + (g << 8) + (r << 16) + (a << 24); +} +exports.mixColor = mixColor; +function unmixColor(col) { + var r = (col >> 16) & 0xff; + var g = (col >> 8) & 0xff; + var b = (col >> 0) & 0xff; + return [r, g, b]; +} +exports.unmixColor = unmixColor; +function identifyApp(url) { + if (exports.hasAlt1) { + alt1.identifyAppUrl(url); + } +} +exports.identifyApp = identifyApp; +function resetEnvironment() { + exports.hasAlt1 = (typeof alt1 != "undefined"); + exports.skinName = exports.hasAlt1 ? alt1.skinName : "default"; +} +exports.resetEnvironment = resetEnvironment; +function convertAlt1Version(str) { + var a = str.match(/^(\d+)\.(\d+)\.(\d+)$/); + if (!a) { + throw new RangeError("Invalid version string"); + } + return (+a[1]) * 1000 * 1000 + (+a[2]) * 1000 + (+a[3]) * 1; +} +var cachedVersionInt = -1; +/** + * checks if alt1 is running and at least the given version. versionstr should be a string with the version eg: 1.3.2 + * @param versionstr + */ +function hasAlt1Version(versionstr) { + if (!exports.hasAlt1) { + return false; + } + if (cachedVersionInt == -1) { + cachedVersionInt = alt1.versionint; + } + return cachedVersionInt >= convertAlt1Version(versionstr); +} +exports.hasAlt1Version = hasAlt1Version; +/** + * Gets the current cursor position in the game, returns null if the rs window is not active (alt1.rsActive) + */ +function getMousePosition() { + var pos = alt1.mousePosition; + if (pos == -1) { + return null; + } + return { x: pos >>> 16, y: pos & 0xFFFF }; +} +exports.getMousePosition = getMousePosition; +/** + * Registers a given HTML element as a frame border, when this element is dragged by the user the Alt1 frame will resize accordingly + * Use the direction arguements to make a given direction stick to the mouse. eg. Only set left to true to make the element behave as the left border + * Or set all to true to move the whole window. Not all combinations are permitted + */ +function addResizeElement(el, left, top, right, bot) { + if (!exports.hasAlt1 || !alt1.userResize) { + return; + } + el.addEventListener("mousedown", function (e) { + alt1.userResize(left, top, right, bot); + e.preventDefault(); + }); +} +exports.addResizeElement = addResizeElement; +/** + * Add an event listener + */ +function on(type, listener) { + if (!exports.hasAlt1) { + return; + } + if (!alt1.events) { + alt1.events = {}; + } + if (!alt1.events[type]) { + alt1.events[type] = []; + } + alt1.events[type].push(listener); +} +exports.on = on; +/** + * Removes an event listener + */ +function removeListener(type, listener) { + var elist = exports.hasAlt1 && alt1.events && alt1.events[type]; + if (!elist) { + return; + } + var i = elist.indexOf(listener); + if (i == -1) { + return; + } + elist.splice(i, 1); +} +exports.removeListener = removeListener; +/** + * Listens for the event to fire once and then stops listening + * @param event + * @param cb + */ +function once(type, listener) { + var fn = (e) => { + removeListener(type, fn); + listener(e); + }; + on(type, fn); +} +exports.once = once; +; +/** + * Used to read a set of images from a binary stream returned by the Alt1 API + */ +class ImageStreamReader { + constructor(reader, ...args) { + this.framebuffer = null; + this.pos = 0; + this.reading = false; + this.closed = false; + //paused state + this.pausedindex = -1; + this.pausedbuffer = null; + this.streamreader = reader; + if (args[0] instanceof imagedata_extensions_1.ImageData) { + this.setFrameBuffer(args[0]); + } + else if (typeof args[0] == "number") { + this.setFrameBuffer(new imagedata_extensions_1.ImageData(args[0], args[1])); + } + } + /** + * + */ + setFrameBuffer(buffer) { + if (this.reading) { + throw new Error("can't change framebuffer while reading"); + } + this.framebuffer = buffer; + } + /** + * Closes the underlying stream and ends reading + */ + close() { + this.streamreader.cancel(); + } + /** + * Reads a single image from the stream + */ + async nextImage() { + if (this.reading) { + throw new Error("already reading from this stream"); + } + if (!this.framebuffer) { + throw new Error("framebuffer not set"); + } + this.reading = true; + var synctime = -Date.now(); + var starttime = Date.now(); + var r = false; + while (!r) { + if (this.pausedindex != -1 && this.pausedbuffer) { + r = this.readChunk(this.pausedindex, this.framebuffer.data, this.pausedbuffer); + } + else { + synctime += Date.now(); + var res = await this.streamreader.read(); + synctime -= Date.now(); + if (res.done) { + throw new Error("Stream closed while reading"); + } + var data = res.value; + r = this.readChunk(0, this.framebuffer.data, data); + } + } + synctime += Date.now(); + //console.log("Decoded async image, " + this.framebuffer.width + "x" + this.framebuffer.height + " time: " + (Date.now() - starttime) + "ms (" + synctime + "ms main thread)"); + this.reading = false; + return this.framebuffer; + } + readChunk(i, framedata, buffer) { + //very hot code, explicit int32 casting with |0 speeds it up by ~ x2 + i = i | 0; + var framesize = framedata.length | 0; + var pos = this.pos; + var datalen = buffer.length | 0; + //var data32 = new Float64Array(buffer.buffer); + //var framedata32 = new Float64Array(framedata.buffer); + //fix possible buffer misalignment + //align to 16 for extra loop unrolling + while (i < datalen) { + //slow loop, fix alignment and other issues + while (i < datalen && pos < framesize && (pos % 16 != 0 || !((i + 16 | 0) <= datalen && (pos + 16 | 0) <= framesize))) { + var rel = pos; + if (pos % 4 == 0) { + rel = rel + 2 | 0; + } + if (pos % 4 == 2) { + rel = rel - 2 | 0; + } + framedata[rel | 0] = buffer[i | 0]; + i = i + 1 | 0; + pos = pos + 1 | 0; + } + //fast unrolled loop for large chunks i wish js had some sort of memcpy + if (pos % 16 == 0) { + while ((i + 16 | 0) <= datalen && (pos + 16 | 0) <= framesize) { + framedata[pos + 0 | 0] = buffer[i + 2 | 0]; + framedata[pos + 1 | 0] = buffer[i + 1 | 0]; + framedata[pos + 2 | 0] = buffer[i + 0 | 0]; + framedata[pos + 3 | 0] = buffer[i + 3 | 0]; + framedata[pos + 4 | 0] = buffer[i + 6 | 0]; + framedata[pos + 5 | 0] = buffer[i + 5 | 0]; + framedata[pos + 6 | 0] = buffer[i + 4 | 0]; + framedata[pos + 7 | 0] = buffer[i + 7 | 0]; + framedata[pos + 8 | 0] = buffer[i + 10 | 0]; + framedata[pos + 9 | 0] = buffer[i + 9 | 0]; + framedata[pos + 10 | 0] = buffer[i + 8 | 0]; + framedata[pos + 11 | 0] = buffer[i + 11 | 0]; + framedata[pos + 12 | 0] = buffer[i + 14 | 0]; + framedata[pos + 13 | 0] = buffer[i + 13 | 0]; + framedata[pos + 14 | 0] = buffer[i + 12 | 0]; + framedata[pos + 15 | 0] = buffer[i + 15 | 0]; + //could speed it up another x2 but wouldn't be able to swap r/b swap and possible alignment issues + //framedata32[pos / 8 + 0 | 0] = data32[i / 8 + 0 | 0]; + //framedata32[pos / 8 + 1 | 0] = data32[i / 8 + 1 | 0]; + //framedata32[pos / 4 + 2 | 0] = data32[i / 4 + 2 | 0]; + //framedata32[pos / 4 + 3 | 0] = data32[i / 4 + 3 | 0]; + pos = pos + 16 | 0; + i = i + 16 | 0; + } + } + if (pos >= framesize) { + this.pausedbuffer = null; + this.pausedindex = -1; + this.pos = 0; + if (i != buffer.length - 1) { + this.pausedbuffer = buffer; + this.pausedindex = i; + } + return true; + } + } + this.pos = pos; + this.pausedbuffer = null; + this.pausedindex = -1; + return false; + } +} +exports.ImageStreamReader = ImageStreamReader; +/** + * Asynchronously captures a section of the game screen + */ +async function captureAsync(...args) { + requireAlt1(); + var rect = rect_1.default.fromArgs(...args); + if (alt1.captureAsync) { + let img = await alt1.captureAsync(rect.x, rect.y, rect.width, rect.height); + return new imagedata_extensions_1.ImageData(img, rect.width, rect.height); + } + if (!hasAlt1Version("1.4.6")) { + return capture(rect.x, rect.y, rect.width, rect.height); + } + var url = "https://alt1api/pixel/getregion/" + encodeURIComponent(JSON.stringify(Object.assign(Object.assign({}, rect), { format: "raw", quality: 1 }))); + var res = await fetch(url); + var imgreader = new ImageStreamReader(res.body.getReader(), rect.width, rect.height); + return imgreader.nextImage(); +} +exports.captureAsync = captureAsync; +/** + * Asynchronously captures multple area's. This method captures the images in the same render frame if possible + * @param areas + */ +async function captureMultiAsync(areas) { + requireAlt1(); + var r = {}; + if (alt1.captureMultiAsync) { + let bufs = await alt1.captureMultiAsync(areas); + for (let a in areas) { + if (!bufs[a]) { + r[a] = null; + } + r[a] = new imagedata_extensions_1.ImageData(bufs[a], areas[a].width, areas[a].height); + } + return r; + } + var capts = []; + var captids = []; + for (var id in areas) { + if (areas[id]) { + capts.push(areas[id]); + captids.push(id); + } + else { + r[id] = null; + } + } + if (capts.length == 0) { + return r; + } + if (!hasAlt1Version("1.5.1")) { + var proms = []; + for (var a = 0; a < capts.length; a++) { + proms.push(captureAsync(capts[a])); + } + var results = await Promise.all(proms); + for (var a = 0; a < capts.length; a++) { + r[captids[a]] = results[a]; + } + } + else { + var res = await fetch("https://alt1api/pixel/getregionmulti/" + encodeURIComponent(JSON.stringify({ areas: capts, format: "raw", quality: 1 }))); + var imgreader = new ImageStreamReader(res.body.getReader()); + for (var a = 0; a < capts.length; a++) { + var capt = capts[a]; + imgreader.setFrameBuffer(new imagedata_extensions_1.ImageData(capt.width, capt.height)); + r[captids[a]] = await imgreader.nextImage(); + } + } + return r; +} +exports.captureMultiAsync = captureMultiAsync; +/** + * Starts capturing a realtime stream of the game. Make sure you keep reading the stream and close it when you're done or Alt1 WILL crash + * @param framecb Called whenever a new frame is decoded + * @param errorcb Called whenever an error occurs, the error is rethrown if not defined + * @param fps Maximum fps of the stream + */ +function captureStream(x, y, width, height, fps, framecb, errorcb) { + requireAlt1(); + if (!hasAlt1Version("1.4.6")) { + throw new Alt1Error("This function is not supported in this version of Alt1"); + } + var url = "https://alt1api/pixel/streamregion/" + encodeURIComponent(JSON.stringify({ x, y, width, height, fps, format: "raw" })); + var res = fetch(url).then(async (res) => { + var reader = new ImageStreamReader(res.body.getReader(), width, height); + try { + while (!reader.closed && !state.closed) { + var img = await reader.nextImage(); + if (!state.closed) { + framecb(img); + state.framenr++; + } + } + } + catch (e) { + if (!state.closed) { + reader.close(); + if (errorcb) { + errorcb(e); + } + else { + throw e; + } + } + } + if (!reader.closed && state.closed) { + reader.close(); + } + }); + var state = { + x, y, width, height, + framenr: 0, + close: () => { state.closed = true; }, + closed: false, + }; + return state; +} +exports.captureStream = captureStream; + + +/***/ }), + +/***/ "canvas": +/*!*************************!*\ + !*** external "canvas" ***! + \*************************/ +/***/ ((module) => { + +if(typeof __WEBPACK_EXTERNAL_MODULE_canvas__ === 'undefined') { var e = new Error("Cannot find module 'canvas'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_canvas__; + +/***/ }), + +/***/ "electron/common": +/*!**********************************!*\ + !*** external "electron/common" ***! + \**********************************/ +/***/ ((module) => { + +if(typeof __WEBPACK_EXTERNAL_MODULE_electron_common__ === 'undefined') { var e = new Error("Cannot find module 'electron/common'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_electron_common__; + +/***/ }), + +/***/ "sharp": +/*!************************!*\ + !*** external "sharp" ***! + \************************/ +/***/ ((module) => { + +if(typeof __WEBPACK_EXTERNAL_MODULE_sharp__ === 'undefined') { var e = new Error("Cannot find module 'sharp'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_sharp__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_79245__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_79245__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __nested_webpack_require_79245__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __nested_webpack_exports__ = __nested_webpack_require_79245__("./src/base/index.ts"); +/******/ +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +/***/ }), + +/***/ "../node_modules/alt1/dist/dialog/index.js": +/*!*************************************************!*\ + !*** ../node_modules/alt1/dist/dialog/index.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js"), __webpack_require__(/*! alt1/ocr */ "../node_modules/alt1/dist/ocr/index.js")); + else {} +})(globalThis, (__WEBPACK_EXTERNAL_MODULE_alt1_base__, __WEBPACK_EXTERNAL_MODULE_alt1_ocr__) => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./src/dialog/imgs/boxtl.data.png": +/*!****************************************!*\ + !*** ./src/dialog/imgs/boxtl.data.png ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_871__) => { + +module.exports=(__nested_webpack_require_871__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAx0lEQVQ4T5VRywrCMBBMaytYyMFHDw16CNWDBg8WoWAFpTf//4ecsGENMQ0UhmVmO5PdNEKZru0GVCLEL/cnS/MYwU3/Jo+AFiKbgevrE7bSmArksgk6DumVsrIKOmJ/G8JWGrMvjUBkbgLBhFzufBkB7uBPQKDcKJYR4C39ALhUuqj15J7/KwHIVIfztjWoZXOkmYuVtB4OQAM4GAFUh+UabmelZ0GANXdh+mW83eyoUz/ykeQm0G4g/j+wnC9NNQAl+VNR6y/yyxm6AFlANgAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/boxtl_leg.data.png": +/*!********************************************!*\ + !*** ./src/dialog/imgs/boxtl_leg.data.png ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_1594__) => { + +module.exports=(__nested_webpack_require_1594__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAE0SURBVDhPjZFNTsMwEIVtJ45D05YmLVKBJRISsOIILNiw5QosOXpIKcpPHduFl0wINAHEJ+tpPB6/Gcv8+emRHZIX1TQ6QuBLbs37QNnVxQlj/P+L31yuH+7vZrNptt2QhxSy0vXe6SAMlYrQqshzyiPmt9fny2WslMqyrQr4+vQsTV8m0eTtdRNN582IjGmtob4nrNsLiqBJcjxfxKhGXBblIk6cNVL68AKwQDUCUVuHCsJZR8egrCpkdq0SSEIbb89vhoOZ53vNSYv0JeVpHni16fYCYYztsz10hzDWQEXQulI7Aq266BD0hHYdqC+BVl30CXlDUUZv+Bp9DIrIG4pBxE7XdPAb/bTkK0IVjN/6I1QmVquE9mMGo2KLJdI06xIjBOff72CLn/rr0YOfwVZr/QEeBH9rQlJ0YgAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/boxtr.data.png": +/*!****************************************!*\ + !*** ./src/dialog/imgs/boxtr.data.png ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_2513__) => { + +module.exports=(__nested_webpack_require_2513__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA3UlEQVQ4T6WTwQrCMBBEk9oKigEVFSweLOLF6sFehOYgePP/P2jNrE1ZcJFUD68J2cwkO23NofF0vD0IY1k3VLfveXVu+jWMALVYxzowxtjw+A2YGVtM1WIKl/szjEohlb8NuAWtkMru6sMYJplbkR0vKF9XH5s0kBs0fYgxyJRAM7clV1YMGxB9R4pxAG6J04tlOdwAIm63uzVnoIkk2unRAF+kKpJEg9HEcdAwQA59iJpIEg2kEEa4QbIBNkMYM0Arg0NEC1KM14i/WBVJuPcutHy+YQMw259CiJ5egv+YzBEq3jQAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/boxtr_leg.data.png": +/*!********************************************!*\ + !*** ./src/dialog/imgs/boxtr_leg.data.png ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_3264__) => { + +module.exports=(__nested_webpack_require_3264__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAFgSURBVDhPnZO9TsMwFIWPHZuUpo2g6hswsbMzsbEgMfAKiIUnYOWNWBh4F1CFhFKKojatmx/jY+E2RRWK+KSrm9ycHF//iceHO7tal5hM3tGLDyAkIIVAY+0maxUBjYApDYSwOOgdulqMxXwOAbjKPzk9GUPc315bLTWWZo2mNs69hzhOvIAjKC3A72Q4HOAj+9zUnp5fIG6uzm2WTdFP+si/ZkgGqRcTY4zPKpKo6sbnfjJAsZj79+l0BsmfSbEocHQ8Ql2V0Fq5LmIfNKaYz8x5nvsckEHIKJZLX1z95AC/kTRNN1rpullXNdyab9FKI3JBQvu1EwVCjVBLdgwCwSRQumm1aRsJ6/b5Ly4vzvYKInc23l4n+zv4DTtoj0pUpHzuZMD5hoUMBMNOBmx3Hyt3+DoZhJ3g+Wib8e507oBRltXOto7Ho24GvJVcNHbACGTuXnQy4MhcNGbGdhrAN5b0ly21yuFfAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimg.data.png": +/*!******************************************!*\ + !*** ./src/dialog/imgs/chatimg.data.png ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_4247__) => { + +module.exports=(__nested_webpack_require_4247__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAAwUlEQVQYV2OYPGlSV1dXcnJyRmqSqbUdQ3VNNRB5uTkJCwuLKqgxtLS0ACVVFGQ4eQUFpRUZgBxHWytOHl4oX0tLS1lZGaiYkZOXW1CUQVXXGChkbGwsJSUFFGI4YM+fqycmpahqoG8AVMVwxJipUptPUFIOqEtEkJdBT4JPSVYSqBgoCTSSQUVLG8QCms/DCzI/OjrK0syEgYERaDiI7+3lHRwcDNQC5bu6ukKEgLp4RKUZsjPSgEJAfrC/t7GhHgChFSifluVS6gAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimg_leg.data.png": +/*!**********************************************!*\ + !*** ./src/dialog/imgs/chatimg_leg.data.png ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_4970__) => { + +module.exports=(__nested_webpack_require_4970__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEOSURBVChTVY+7SgNBFIZnZ3aTWdCYddVcRBIVREEC2gcsFnwMO9/JxsrGzkbQB1AkleArWJjLXhRhJnNbf9ltcviL/3z/nDMzXjI+Hx0PDoadh6dJI6DGOUKIT6kPenZ6eHv/fDTo7vbbRSF5GCCjoDd3j/v9rThel0sLKoWG2DzN97rxdrwhlFHaCqGNdRAF7e1EUhlrHIQl1sAbGjb/N1aFXgqptYEoD3nx/Yu+QvURXI6+tqtFPcpru1os3my5oBX6tgaEaOtcWbKmTywJGF+rMlA8Cgm9vkry+ed0luXLxo9Q+I12JcSGvc7F+ORt8oE5a32pvEositqeI5fJ6OX1/Ws2TbNFUWR5nv4B2LeYEU2WizoAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimgactive.data.png": +/*!************************************************!*\ + !*** ./src/dialog/imgs/chatimgactive.data.png ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_5869__) => { + +module.exports=(__nested_webpack_require_5869__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAApklEQVQYV2Po6upqaWmJjo4CIk1dQ4ZiMLCzNGVgYGQRkGCorqmOjggTEeQF8hm4BRmCg4ONDfVAHAhfWVlZWFgYygciKUVVSVkFoCgnD1jLHkOGZHlWbkFRoBCIf0CdIV+GgZGTF6pLnoNBkJcLqhiIBCXloCwgAprv7eWtraGG4FtZWXq5OQG1QPnGxsaurq5AIRCfhYshKTYKqASoy83RRkVBBgAFhh2w1olrrAAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimgactive_leg.data.png": +/*!****************************************************!*\ + !*** ./src/dialog/imgs/chatimgactive_leg.data.png ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_6580__) => { + +module.exports=(__nested_webpack_require_6580__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEESURBVChTPY4xTgMxEEXtmfFmE1hpRSQECqIIVRBCEanpuABnyImo09FzASokjgAVVUQBURpCSMiKHdt8ZwVf1mj8/veM7dXlxbBfnvTad4/vmSMNwRgjRAJ6fno4uX3IssA5k5KV5BHozeQedK9s5bm0dwmVmfh1OisLAa3rEJV8DCFE7wOBFjsO1AbGBAg0jerkDNTQSL6hyRDrfIjN5f8RRPpjmCw6NEhgjakdKknWJGCnhFj8yKDSfK7IQla2/p+46LBRaTkiNlETwvoYDY2vBx/V6m2x2u5IpxH3j4+Gg4Pnl1mluvSi335TBRwuu/vO+NFZ72m6+FxvlnW99v5L9ReDbXkhpJVqYwAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimghover.data.png": +/*!***********************************************!*\ + !*** ./src/dialog/imgs/chatimghover.data.png ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_7463__) => { + +module.exports=(__nested_webpack_require_7463__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAAz0lEQVQYV2M4dfLEjp07W1pamhrrnL38GFavXr10yeKk2ChhYWEpFW2GLVu2dLQ1a2uocfIKiipoMABVRoaFcPLwcguKiiqoMVhZWRob6kmKCgGFBMSkGUztnU2t7VxdXZWVlYFCDP9DhSfbyaloaQMVSklJMfz3YF1sJSylqKqlpQW0gsFOQVhLTRnC4RGVZjAyBymDma/BUF1T7e3lzcDACJQUlFZkSE5OLsjNAmoByoP4YZGR2RlpQCGgLpD+Sb2d0dFR2dnZQC8Y6WkBAPN1NR2AAHfmAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimghover_leg.data.png": +/*!***************************************************!*\ + !*** ./src/dialog/imgs/chatimghover_leg.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_8222__) => { + +module.exports=(__nested_webpack_require_8222__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEjSURBVChTVc89SwNBEIDh2727fChqFosQLExMY4gIsbOIBLT0B9joX9RKTCOksLESSa1Y5TSa+8rdze7s7jl4lfAUw7sMy7CL8cnx4f5Bt3338FzzubbWcRyPc4/q6Kg/nT7eXA72erurz2xHNCBXnOrt/ex01G2JjSwq6nUeh5Ci67ISR30x7DVXqQVAkmegC+BUOx3xFhilNEmTQgIS3qh79JtWOksKkudQ4TXPWyxCpXWSAQGpK3wZrmmDJqn+4VSryRgkIFXF3doUvldyVtJlf8c5gFbbkh5qa822mz5FUBYRpTJaG359dRYE3/OPKEpgncu0MBJtCMztdtqT8eDl9V0xP0cXFe05BktXiBazzvlkOHuaB8vVVxj/xOkySn4BoaPZbEW+44oAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimg.data.png": +/*!**********************************************!*\ + !*** ./src/dialog/imgs/continueimg.data.png ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_9141__) => { + +module.exports=(__nested_webpack_require_9141__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAABTklEQVRIS72PMUsDQRCFB2Jjk85KsPEPmMYmgig2gWAlKWwCIiIihIC1WIpiJZY2SpqgpLCQNDZRAjZWHqmvsVEQ1Ebl8J0D4zIXD5HdgY/lzey7fffoeVD9fFxikpfaP/jLhxLhojy+kPdRjZKokhIvBieqIC+6WcVpkfjdiz5u55P7BR6CgqDu2dbeaQdnGpoxeAcpaT0buBsD/XQ1pwwhoPde2YDX/oxbTxpir5x+sasXt8vZhm/9knL6hR5OJm0YHI2D9c1GdeWH7sG0svmF4uMJA7jbbnPW7YaR98rsC7xMHGBAttvd/pjyeIeQYcD1TtGtB42N8oSAettFBnkgR+SPEIxaytVlc5Qb4oQG7q37FSOjMiibQjwMcZIBnY0RcNiYYqFuA0GtOl0s0/laYSj4D6XdjSBLCLENdQru7W9OeUpGhsd8YGvV6Qu6U2ehlR3eegAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimg_leg.data.png": +/*!**************************************************!*\ + !*** ./src/dialog/imgs/continueimg_leg.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_10068__) => { + +module.exports=(__nested_webpack_require_10068__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAASPSURBVEhLrVZLaFxVGD7nPubeO5NMZpIQTYfaNn2RREsrbQXbuOnKR4WCiKtCV2JABF24qTvdCK5ciIWudeFCqkuLC6WKQqVmEVsMjUkTyySTec993+t37n/n5CZNShQ/Dof/db7z/efce2f4J+++PDbqsgz0sN2y9a7NYResmIKPgTVgptY26IOpwViz0cnFdur04XFrqJDw64OargZ+ODKQJPaAWr1td5zs1lq+pKpmztBzYaPWYcxvV9cN/v7sa4cr1ulzz6Oitv7As0OqBnzH6ThRr1VPfcbyxfKAqeimWRotwe1126hHGWW3Fft2jwzdyn/42U2ygatvXaAU4iAsl/KwiQTMoqK/deymbNwoY95oBiZvJwGhhAzSk7PUbr1brdZkCkoWVmzR3jOT+1p+Keita/nRRnVpYEDs1+n0YGAWHAkCvVwyXGyw3lbhbstKtBylaEbNFg4wxRc3bn19fSaf97hy5O8H9y6/9+vrLz2naoIE4Lki6skmZJmJTQZB67DCE0XxZFEKcZKdlKdAcHhIm5tfFe1V9o1hJapjrxUG4vZ8P8BsWgZmx3Z1XYMaMihFoDgMpMjFTJVBIMo0TYPxzfd3Pv/giFUq5y02NHKMOnxxZpoKABgAtiMeLKGgNAjZOGbYMGSQXMsySRKaWlmtpu3B6rS7iEpIIkC6j4JIUycDCnp++qjf/PmPj9/cPzRmjIyXZYcXzhxmqo5sTk9vcjdInj0ChNPTRxcWltXzZ6YUzpuNtud5UQZJXwEMWkBBx/U5Z4qiUFDWIEKGBLKbmkJ/ojJ87cbiC5OFKPYVtTf65LFzx/Offjk3MT7EFDWMYjlUNSUHwEDB1N8zsAQaOp2uaM80crWaeIkl3W7DdV0ehX4Y+0GIIYK+F8YctpS1RVPoszhygwjuU+Pl69/+9cYrxcDrdZvL+4+ffPrg4LWvfhcdxhGaTFYLZXJQ5L+hULAcx+XvXLnIrOFWdVlIAZKnZRvQVWrtAsMQbymBig1NdIvGkpjAj7/d/2h2Csbd+bWV9bXbS2a96Zw/dYgqBR7dGpIQ3F3YYzA2NtyoN9WTkwcCp92znfTM+tB4LA4VZ5/5lmSBWwtjRoNF6SqAsqCy/UgW/HRn8erlibxqz99tNZuL9Vb050N29sRBVeG0r6bgoe+/gaGPTUEFBi/ZnYRJSZuVu0M8nVGknjhaCYMgK4UG1KMIvJiznciRxbYURIvlUcC4gvmXuaW3Xy2xwL2/EqG3jY5+a8E4PVXhDI1FIcQmTW4eaHLnJCBLLiUlxyiQLsmcCzEggs+4aO/U5IG2GwoplMCAJiru824BVVJNfxUuD5McUdKVyCMes9W19nihttFouW4Dvf1wL4fekEWK40sV480UTSIC6fKgd4SUhBMRLt180qS48MSliO/hNDi/cmmGVv5fwNnL14nuweT2d7cfwiga4n/Z2elDIpfAiS3MKCBj8z38lyiqvpP5DyjBZy8+qxs5WGEURH76JVB0sY2q7PxbtyOwnAwiIQbp7hFy1Y4QVKrNQnEQBNRnRWrGFsGBG/wD9kSQTvgpZ/YAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimgdown.data.png": +/*!**************************************************!*\ + !*** ./src/dialog/imgs/continueimgdown.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_12171__) => { + +module.exports=(__nested_webpack_require_12171__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAABMklEQVRIS92VoU4DQRCG5wKGNyEo3gB1BtWEYGqaNAGBoQ3BoAiqKVXwDJUEgcAgCQIUBoPgVfg2/2WzGUpqdk40+XqZ3Z3u3Le32bXbQbMc2UaCmj2cbr1dWTSvl4mXC3s82+appsupDmqp3ueNRaN6s+nBaHzCU82Pa59WF9TSihJ9zex7EQgl7s/3cRPEcqNuUGkmRy2tohsIotSTIW/gcurS6f3c9QFf6a8hL+HSKoJatznzPsm7pWyu7FlL+RfmZzdS73BwtNseZ56nOyq9dv6VCerMQwSKZZS+Xj9Hi9wmw73SjSadcQdMOlr4qUYczP+fm3D5VWDapNfPvQelHjE7xyVUJ9173O66ZKNhLWUoNzcaAWqd3vsknFxSgRutjmrZvG34iE9D2zCQmrfNLxl9slarbU3QAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimgdown_leg.data.png": +/*!******************************************************!*\ + !*** ./src/dialog/imgs/continueimgdown_leg.data.png ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_13074__) => { + +module.exports=(__nested_webpack_require_13074__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAQQSURBVEhL1VW9bxxFFN/52NvbO59sEic5GZMIEHFkAiICKaRDAlGAlJKGioqShpqejn+ABiEoqFIhkIJEk44miSCRyIcSJXawfT6f7253dueD39xbz62/Ekei4ae5pzdv3rz3fm9m59jHb780N5tFu1GWttKOgDjmlXY4DgsY9nKRQkppaAqkup3JUTXZh0IViFlP3UgalTZZhexvpezyu6ePH4u73QXMc+15ltZBxpxBscNxVnhXQtpo8JkWlljccGVlJ394QpKzZSl3WaZYmjiSV69PO/j+mymMUGCHZ+eFhOwEBIek1GQJGJUCYUlHJaRQPVCwZdTrBzsq2eiVnt7phZOYb6u8HRuEoOWAEBGlkKLyPGk2SQ+AkchU8x2oTP/xoPj2m8+gt9qdR3/f/PLr395alILzJJXkQ6CYSBcShR7VU0PCk5ZI7yRNFF9f8l1Lmg8e/yOWFmfjNM1LheWssEbrPWM0NI4Jbdh4O4+YhTTaqrzAwJR8yAg3X8KEUlHosjTWOGPt6sBeXErKfOzc+MTi2UvL7e9+vjPfjIyxlY9GHEvRkI4iI2ae+yWEhU4ZyRMKLZG+PRyHJWxEqb4qFuWZ8vSSpgQ31EQeewbKrSuT+iuQPRjrU+f8jYU0pTs1w3+8+vDCa3NWS602uy8vg+H3v9ydSyxzzBgXce8Jqhi4+BTKR5zAx7QWDkcBBcFIW8lokHt60CaHsKv0A4E0lP6ZgJsu8AFV02Mtd+Xa6jtLLYbuqhEx/OHXe2COVbhhcOEj1+MTK1ggyYIrHfSnA46jceHpzXQ6w8GuNyrEreuFMigCzQ79BgGaCjl9waad3uFWWv8ezrejK9fWPnpvCXdyfWXtzLnzyy+qn35fIYYAMUSiEKGyOxdYOc3wRWJa54wLQg2iwSMhJJMxz7LS/zHMd2cHm0NUD9dGIlgZafQpjrwirDRcTep7CrCLFGzZ70z0bq1FX31+yfLW9b/+XF/Zunl/Y6DSN07teskEF/TaoIBIVO1BAZAuppkHshBghE4y1EyeeLe2+8rTQ3HErQ7KhD349ivT84OIAeD2xScXoNy7/2R9q9/rjWE5dwJ/A1N6CRfTth6UN5QEWad0GEBKnDk+I7kIBx0Ai8HvaBf9MDSUKSy73Ys+/fDVXJnV1R644Q27sWLOzk3uEm4a27nYjKNuYyOc2oE9nZbEOPbS4Yb+gC3zD6cfkYiaPFZai1dOdmod/C+Bo5PGlYxt5FFHqs3+AO83/Q2CGwF/JYEe1Q3lmfeFh45gl/W3GJRwkuCFgTVM8YXjr51dfr0rW3v/o+sXnUB3GvJ5QZ/ijSdeaq2llPXvDRey0nYQsoQaKHXQgf3l4awqrYZBlrMPzi+00IH/P/Yf0iAr/gXJh0N13Pe/YwAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/index.ts": +/*!*****************************!*\ + !*** ./src/dialog/index.ts ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_14933__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const a1lib = __importStar(__nested_webpack_require_14933__(/*! alt1/base */ "alt1/base")); +const OCR = __importStar(__nested_webpack_require_14933__(/*! alt1/ocr */ "alt1/ocr")); +const base_1 = __nested_webpack_require_14933__(/*! alt1/base */ "alt1/base"); +var imgs_rs3 = (0, base_1.webpackImages)({ + chatimg: __nested_webpack_require_14933__(/*! ./imgs/chatimg.data.png */ "./src/dialog/imgs/chatimg.data.png"), + chatimghover: __nested_webpack_require_14933__(/*! ./imgs/chatimghover.data.png */ "./src/dialog/imgs/chatimghover.data.png"), + chatimgactive: __nested_webpack_require_14933__(/*! ./imgs/chatimgactive.data.png */ "./src/dialog/imgs/chatimgactive.data.png"), + continueimg: __nested_webpack_require_14933__(/*! ./imgs/continueimg.data.png */ "./src/dialog/imgs/continueimg.data.png"), + continueimgdown: __nested_webpack_require_14933__(/*! ./imgs/continueimgdown.data.png */ "./src/dialog/imgs/continueimgdown.data.png"), + boxtl: __nested_webpack_require_14933__(/*! ./imgs/boxtl.data.png */ "./src/dialog/imgs/boxtl.data.png"), + boxtr: __nested_webpack_require_14933__(/*! ./imgs/boxtr.data.png */ "./src/dialog/imgs/boxtr.data.png") +}); +var imgs_leg = (0, base_1.webpackImages)({ + chatimg: __nested_webpack_require_14933__(/*! ./imgs/chatimg_leg.data.png */ "./src/dialog/imgs/chatimg_leg.data.png"), + chatimghover: __nested_webpack_require_14933__(/*! ./imgs/chatimghover_leg.data.png */ "./src/dialog/imgs/chatimghover_leg.data.png"), + chatimgactive: __nested_webpack_require_14933__(/*! ./imgs/chatimgactive_leg.data.png */ "./src/dialog/imgs/chatimgactive_leg.data.png"), + continueimg: __nested_webpack_require_14933__(/*! ./imgs/continueimg_leg.data.png */ "./src/dialog/imgs/continueimg_leg.data.png"), + continueimgdown: __nested_webpack_require_14933__(/*! ./imgs/continueimgdown_leg.data.png */ "./src/dialog/imgs/continueimgdown_leg.data.png"), + boxtl: __nested_webpack_require_14933__(/*! ./imgs/boxtl_leg.data.png */ "./src/dialog/imgs/boxtl_leg.data.png"), + boxtr: __nested_webpack_require_14933__(/*! ./imgs/boxtr_leg.data.png */ "./src/dialog/imgs/boxtr_leg.data.png") +}); +var fontmono = __nested_webpack_require_14933__(/*! ../fonts/aa_8px_mono.fontmeta.json */ "./src/fonts/aa_8px_mono.fontmeta.json"); +var fontheavy = __nested_webpack_require_14933__(/*! ../fonts/aa_8px_mono_allcaps.fontmeta.json */ "./src/fonts/aa_8px_mono_allcaps.fontmeta.json"); +class DialogReader { + constructor() { + this.pos = null; + } + find(imgref) { + if (!imgref) { + imgref = a1lib.captureHoldFullRs(); + } + if (!imgref) { + return null; + } + var boxes = []; + for (let imgs of [imgs_rs3, imgs_leg]) { + var pos = imgref.findSubimage(imgs.boxtl); + for (var a in pos) { + var p = pos[a]; + if (imgref.findSubimage(imgs.boxtr, p.x + 492, p.y, 16, 16).length != 0) { + boxes.push(Object.assign(Object.assign({}, p), { legacy: imgs == imgs_leg })); + } + } + } + if (boxes.length == 0) { + return false; + } + var box = boxes[0]; + if (boxes.length > 1) { + console.log("More than one dialog box found"); + } + this.pos = { x: box.x + 1, y: box.y + 1, width: 506, height: 130, legacy: box.legacy }; + return this.pos; + } + ensureimg(imgref) { + if (!this.pos) { + return null; + } + if (imgref && a1lib.Rect.fromArgs(imgref).contains(this.pos)) { + return imgref; + } + return a1lib.captureHold(this.pos.x, this.pos.y, this.pos.width, this.pos.height); + } + read(imgref) { + imgref = this.ensureimg(imgref); + if (!imgref) { + return false; + } + let title = this.readTitle(imgref); + var r = { + text: null, + opts: null, + title + }; + if (this.checkDialog(imgref)) { + r.text = this.readDialog(imgref, true); + return r; + } + else { + var opts = this.findOptions(imgref); + if (opts.length != 0) { + r.opts = this.readOptions(imgref, opts); + return r; + } + else { + return null; + } + } + } + readTitle(imgref) { + if (!this.pos) { + throw new Error("position not found yet"); + } + var buf = imgref.toData(this.pos.x, this.pos.y, this.pos.width, 32); + //somehow y coord can change, 19 for "choose and option:" 18 for npc names + var pos = OCR.findChar(buf, fontheavy, [255, 203, 5], Math.round(this.pos.width / 2) - 10, 16, 20, 4); + if (!pos) { + return ""; + } + var read = OCR.readSmallCapsBackwards(buf, fontheavy, [[255, 203, 5]], Math.round(this.pos.width / 2) - 10, pos.y, 150, 1); + return read.text.toLowerCase(); //normalize case since we don't actually know the original + } + checkDialog(imgref) { + if (!this.pos) { + throw new Error("position not found yet"); + } + var locs = []; + let imgs = (this.pos.legacy ? imgs_leg : imgs_rs3); + locs = locs.concat(imgref.findSubimage(imgs.continueimg, this.pos.x - imgref.x, this.pos.y - imgref.y, this.pos.width, this.pos.height)); + locs = locs.concat(imgref.findSubimage(imgs.continueimgdown, this.pos.x - imgref.x, this.pos.y - imgref.y, this.pos.width, this.pos.height)); + return locs.length != 0; + } + readDialog(imgref, checked) { + if (!this.pos) { + throw new Error("position not found yet"); + } + imgref = this.ensureimg(imgref); + if (!imgref) { + return null; + } + if (!checked) { + checked = this.checkDialog(imgref); + } + if (!checked) { + return null; + } + var lines = []; + var buf = imgref.toData(this.pos.x, this.pos.y + 33, this.pos.width, 80); + for (var y = 0; y < buf.height; y++) { + var hastext = false; + for (var x = 200; x < 300; x++) { + var i = x * 4 + y * 4 * buf.width; + if (buf.data[i] + buf.data[i + 1] + buf.data[i + 2] < 50) { + hastext = true; + break; + } + } + if (hastext) { + var chr = null; + chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 192, y + 5, 12, 3); + chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 246, y + 5, 12, 3); + chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 310, y + 5, 12, 3); + if (chr) { + var read = OCR.readLine(buf, fontmono, [0, 0, 0], chr.x, chr.y, true, true); + if (read.text.length >= 3) { + lines.push(read.text); + } + y = chr.y + 5; + } + } + } + return lines; + } + findOptions(imgref) { + var locs = []; + if (!this.pos) { + throw new Error("position not found yet"); + } + let imgs = (this.pos.legacy ? imgs_leg : imgs_rs3); + var a = imgref.findSubimage(imgs.chatimg); + for (var b in a) { + locs.push({ x: a[b].x, y: a[b].y, hover: false, active: false }); + } + var a = imgref.findSubimage(imgs.chatimghover); + for (var b in a) { + locs.push({ x: a[b].x, y: a[b].y, hover: true, active: false }); + } + var a = imgref.findSubimage(imgs.chatimgactive); + for (var b in a) { + locs.push({ x: a[b].x, y: a[b].y, hover: false, active: true }); + } + return locs; + } + readOptions(imgref, locs) { + imgref = this.ensureimg(imgref); + if (!imgref) { + return null; + } + if (!this.pos) { + throw new Error("interface not found"); + } + var buf = imgref.toData(); + if (!locs) { + locs = this.findOptions(imgref); + } + var bgcol = [150, 135, 105]; + var fontcol = this.pos.legacy ? [255, 255, 255] : [174, 208, 224]; + var r = []; + for (var a = 0; a < locs.length; a++) { + var dx = locs[a].x + 30; + var dy = locs[a].y + 6; + var checkline = imgref.toData(dx, dy, Math.min(500, imgref.width - a), 1); + var row = null; + for (var x = 0; x < checkline.width; x++) { + var i = x * 4; + if (row) { + if (coldiff(checkline.data[i], checkline.data[i + 1], checkline.data[i + 2], bgcol[0], bgcol[1], bgcol[2]) < 75) { + row.width = x + 20; + break; + } + } + else if (coldiff(checkline.data[i], checkline.data[i + 1], checkline.data[i + 2], fontcol[0], fontcol[1], fontcol[2]) < 100) { + var text = ""; + var chr = OCR.findChar(buf, fontmono, fontcol, dx + x + 2 - imgref.x, dy + 3 - imgref.y, 30, 1); + if (chr) { + var read = OCR.readLine(buf, fontmono, fontcol, chr.x, chr.y, true, true); + var text = read.text; + } + row = { text: text, x: dx + x, y: dy, width: 200, buttonx: dx - 31, hover: !!locs[a].hover, active: locs[a].active }; + } + } + if (row) { + r.push(row); + } + } + r.sort((a, b) => a.y - b.y); + return r; + } +} +exports["default"] = DialogReader; +//TODO get rid of this or make it standard +function coldiff(r1, g1, b1, r2, g2, b2) { + return Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2); +} + + +/***/ }), + +/***/ "alt1/base": +/*!**************************************************************************************************!*\ + !*** external {"root":"A1lib","commonjs2":"alt1/base","commonjs":"alt1/base","amd":"alt1/base"} ***! + \**************************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_alt1_base__; + +/***/ }), + +/***/ "alt1/ocr": +/*!*********************************************************************************************!*\ + !*** external {"root":"OCR","commonjs2":"alt1/ocr","commonjs":"alt1/ocr","amd":"alt1/ocr"} ***! + \*********************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_alt1_ocr__; + +/***/ }), + +/***/ "./src/fonts/aa_8px_mono.fontmeta.json": +/*!*********************************************!*\ + !*** ./src/fonts/aa_8px_mono.fontmeta.json ***! + \*********************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"chars":[{"width":7,"bonus":75,"chr":"a","pixels":[0,7,187,1,3,221,1,6,170,1,8,255,2,3,255,2,5,187,2,8,255,3,3,255,3,5,255,3,8,221,4,4,238,4,5,255,4,6,204,4,7,255,4,8,238],"secondary":false},{"width":7,"bonus":105,"chr":"b","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,204,1,4,170,1,7,170,1,8,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,170,4,4,170,4,7,170,5,5,187,5,6,187],"secondary":false},{"width":7,"bonus":50,"chr":"c","pixels":[0,5,170,0,6,187,1,4,187,1,7,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,221,4,8,221],"secondary":false},{"width":7,"bonus":105,"chr":"d","pixels":[0,5,187,0,6,187,1,4,170,1,7,170,1,8,170,2,3,255,2,8,255,3,3,255,3,8,255,4,3,204,4,4,170,4,7,170,4,8,187,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,221,5,7,221,5,8,204],"secondary":false},{"width":7,"bonus":75,"chr":"e","pixels":[0,5,187,0,6,170,1,4,187,1,5,255,1,7,204,2,3,255,2,5,255,2,8,255,3,3,255,3,5,255,3,8,255,4,3,187,4,5,255,4,8,221,5,5,204],"secondary":false},{"width":4,"bonus":50,"chr":"f","pixels":[0,3,204,1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204,2,1,255,2,3,255],"secondary":false},{"width":7,"bonus":115,"chr":"g","pixels":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,170,1,11,153,2,3,255,2,8,255,2,11,238,3,3,255,3,8,255,3,11,221,4,3,221,4,7,153,4,8,221,4,10,204,5,3,204,5,4,221,5,5,221,5,6,221,5,7,221,5,8,221,5,9,170],"secondary":false},{"width":7,"bonus":90,"chr":"h","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,170,1,4,204,2,3,255,3,3,255,4,3,170,4,4,221,4,5,221,4,6,221,4,7,221,4,8,204],"secondary":false},{"width":3,"bonus":35,"chr":"i","pixels":[0,1,238,0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204],"secondary":false},{"width":4,"bonus":50,"chr":"j","pixels":[0,11,153,1,11,170,2,1,204,2,3,204,2,4,221,2,5,221,2,6,221,2,7,221,2,8,221,2,9,221],"secondary":false},{"width":6,"bonus":70,"chr":"k","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,4,153,2,5,255,2,6,221,3,3,204,3,7,221],"secondary":false},{"width":3,"bonus":40,"chr":"l","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,1,8,255],"secondary":false},{"width":10,"bonus":115,"chr":"m","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,153,4,4,255,4,5,221,4,6,221,4,7,221,4,8,204,5,4,187,6,3,255,7,3,238,8,4,170,8,5,221,8,6,221,8,7,221,8,8,204],"secondary":false},{"width":7,"bonus":75,"chr":"n","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,238,5,4,170,5,5,221,5,6,221,5,7,221,5,8,204],"secondary":false},{"width":8,"bonus":70,"chr":"o","pixels":[0,5,187,0,6,170,1,4,204,1,7,221,2,3,238,2,8,238,3,3,255,3,8,255,4,3,238,4,8,255,5,4,204,5,7,221,6,5,170,6,6,170],"secondary":false},{"width":6,"bonus":90,"chr":"p","pixels":[0,3,238,0,4,255,0,5,187,0,6,204,0,7,255,0,8,221,0,9,221,0,10,221,1,3,255,1,8,238,2,3,255,2,8,255,3,3,238,3,8,238,4,4,238,4,5,255,4,6,255,4,7,238],"secondary":false},{"width":7,"bonus":90,"chr":"q","pixels":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,153,1,8,170,2,3,255,2,8,255,3,3,238,3,8,238,4,3,255,4,4,255,4,5,187,4,6,187,4,7,255,4,8,238,4,9,221,4,10,221],"secondary":false},{"width":4,"bonus":45,"chr":"r","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,187,1,4,204,2,3,255],"secondary":false},{"width":6,"bonus":50,"chr":"s","pixels":[0,4,187,1,3,255,1,5,238,1,8,255,2,3,255,2,8,255,3,3,255,3,6,238,3,8,255,4,7,187],"secondary":false},{"width":5,"bonus":45,"chr":"t","pixels":[1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,170,2,3,255,2,8,238,3,8,153],"secondary":false},{"width":6,"bonus":70,"chr":"u","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,170,1,8,238,2,8,255,3,8,204,4,3,204,4,4,221,4,5,221,4,6,204,4,7,255,4,8,221],"secondary":false},{"width":6,"bonus":50,"chr":"v","pixels":[0,3,238,1,5,238,1,6,204,2,7,255,2,8,255,3,5,153,3,6,255,3,7,153,4,3,238,4,4,204],"secondary":false},{"width":10,"bonus":95,"chr":"w","pixels":[1,3,153,1,4,238,1,5,187,2,6,153,2,7,238,2,8,187,3,6,204,3,7,238,3,8,153,4,3,170,4,4,255,5,4,221,5,5,221,6,7,255,6,8,221,7,6,238,7,7,204,8,3,238,8,4,204],"secondary":false},{"width":6,"bonus":55,"chr":"x","pixels":[0,8,170,1,3,170,1,4,204,1,7,221,2,5,255,2,6,238,3,4,255,3,6,187,3,7,187,4,3,221,4,8,255],"secondary":false},{"width":6,"bonus":65,"chr":"y","pixels":[0,3,255,0,4,153,0,11,221,1,5,204,1,6,221,1,11,187,2,7,187,2,8,255,2,9,238,3,6,238,3,7,187,4,3,204,4,4,221],"secondary":false},{"width":6,"bonus":70,"chr":"z","pixels":[0,3,153,0,8,204,1,3,255,1,7,221,1,8,255,2,3,255,2,6,255,2,8,255,3,3,255,3,4,170,3,5,170,3,8,255,4,3,255,4,8,255],"secondary":false},{"width":8,"bonus":85,"chr":"A","pixels":[0,8,153,1,6,221,1,7,238,2,3,170,2,4,255,2,5,187,2,6,255,3,1,255,3,2,255,3,6,255,4,2,255,4,3,238,4,6,255,5,5,255,5,6,255,6,7,187,6,8,255],"secondary":false},{"width":7,"bonus":125,"chr":"B","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,4,255,1,8,255,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,1,221,4,4,255,4,5,170,4,8,204,5,2,170,5,3,170,5,6,187,5,7,153],"secondary":false},{"width":9,"bonus":80,"chr":"C","pixels":[0,4,187,0,5,187,1,2,221,1,3,153,1,6,153,1,7,204,2,1,170,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,170,6,8,170],"secondary":false},{"width":8,"bonus":100,"chr":"D","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,8,255,2,1,255,2,8,255,3,1,255,3,8,255,4,1,204,4,8,204,5,2,221,5,7,221,6,4,187,6,5,187],"secondary":false},{"width":6,"bonus":95,"chr":"E","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,1,8,255,2,1,255,2,5,255,2,8,255,3,1,255,3,5,255,3,8,255,4,1,153,4,8,221],"secondary":false},{"width":6,"bonus":70,"chr":"F","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255],"secondary":false},{"width":9,"bonus":105,"chr":"G","pixels":[0,4,170,0,5,187,1,2,204,1,3,153,1,7,221,2,1,170,2,8,187,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,238,6,1,170,6,5,255,6,7,153,6,8,170,7,5,153,7,6,221,7,7,221,7,8,204],"secondary":false},{"width":8,"bonus":105,"chr":"H","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,5,255,3,5,255,4,5,255,5,5,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],"secondary":false},{"width":4,"bonus":60,"chr":"I","pixels":[0,1,192,0,8,191,1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,2,1,192,2,8,191],"secondary":false},{"width":6,"bonus":70,"chr":"J","pixels":[0,6,153,0,7,153,1,8,204,2,1,221,2,8,255,3,1,255,3,8,204,4,1,204,4,2,221,4,3,221,4,4,221,4,5,221,4,6,221,4,7,153],"secondary":false},{"width":7,"bonus":85,"chr":"K","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,255,2,4,255,3,3,221,3,5,170,3,6,204,4,1,204,4,2,153,4,7,238,4,8,153],"secondary":false},{"width":6,"bonus":60,"chr":"L","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,8,255,2,8,255,3,8,255,4,8,255],"secondary":false},{"width":9,"bonus":130,"chr":"M","pixels":[0,1,245,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,1,2,170,1,3,225,2,4,207,2,5,190,3,6,232,4,6,232,5,4,207,5,5,190,6,2,170,6,3,224,7,1,245,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255],"secondary":false},{"width":8,"bonus":110,"chr":"N","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,2,255,2,3,221,3,4,187,3,5,187,4,6,221,5,7,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],"secondary":false},{"width":10,"bonus":110,"chr":"O","pixels":[0,4,187,0,5,170,1,2,204,1,3,153,1,6,170,1,7,204,2,1,153,2,8,153,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,153,6,8,153,7,2,204,7,3,153,7,6,170,7,7,204,8,4,187,8,5,170],"secondary":false},{"width":7,"bonus":85,"chr":"P","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,4,1,187,4,5,187,5,3,221],"secondary":false},{"width":9,"bonus":100,"chr":"Q","pixels":[0,4,187,0,5,187,1,2,221,1,6,153,1,7,221,2,1,187,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,238,5,8,238,6,2,204,6,7,255,7,3,255,7,4,204,7,5,221,7,6,255,7,8,204],"secondary":false},{"width":7,"bonus":100,"chr":"R","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,3,6,187,4,2,238,4,3,204,4,4,255,4,7,238,4,8,170],"secondary":false},{"width":6,"bonus":70,"chr":"S","pixels":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,1,255,2,4,170,2,8,255,3,1,255,3,5,255,3,8,255,4,1,170,4,6,221,4,7,238],"secondary":false},{"width":8,"bonus":65,"chr":"T","pixels":[0,1,255,1,1,255,2,1,255,3,1,255,3,2,221,3,3,221,3,4,221,3,5,221,3,6,221,3,7,221,3,8,204,4,1,255,5,1,255],"secondary":false},{"width":8,"bonus":85,"chr":"U","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,187,1,7,170,2,8,255,3,8,255,4,8,221,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,255,5,7,238],"secondary":false},{"width":7,"bonus":70,"chr":"V","pixels":[0,1,255,0,2,187,1,3,153,1,4,255,1,5,153,2,6,187,2,7,238,3,7,255,3,8,204,4,4,204,4,5,238,5,1,170,5,2,255,5,3,153],"secondary":false},{"width":10,"bonus":125,"chr":"W","pixels":[0,1,255,0,2,221,1,4,187,1,5,255,1,6,204,2,7,255,2,8,255,3,3,153,3,4,238,3,5,221,4,1,255,4,2,255,4,3,153,5,3,170,5,4,238,5,5,204,6,7,255,6,8,255,7,4,153,7,5,238,7,6,238,7,7,153,8,1,238,8,2,238,8,3,153],"secondary":false},{"width":7,"bonus":75,"chr":"X","pixels":[0,8,170,1,1,187,1,2,204,1,7,238,2,3,221,2,4,153,2,5,255,2,6,153,3,4,255,3,5,238,4,2,238,4,6,204,4,7,170,5,1,204,5,8,255],"secondary":false},{"width":7,"bonus":55,"chr":"Y","pixels":[0,1,170,1,2,238,2,3,153,2,4,255,3,4,221,3,5,204,3,6,221,3,7,221,3,8,204,4,3,255,5,1,238],"secondary":false},{"width":7,"bonus":75,"chr":"Z","pixels":[0,8,187,1,1,255,1,7,221,1,8,255,2,1,255,2,5,204,2,8,255,3,1,255,3,4,204,3,8,255,4,1,255,4,2,221,4,8,255,5,1,187,5,8,153],"secondary":false},{"width":7,"bonus":90,"chr":"0","pixels":[0,2,153,0,3,221,0,4,255,0,5,255,0,6,238,0,7,170,1,1,187,1,8,204,2,1,187,2,8,187,3,1,221,3,8,204,4,2,170,4,3,255,4,4,187,4,5,187,4,6,238,4,7,170],"secondary":false},{"width":7,"bonus":50,"chr":"1","pixels":[1,8,187,2,1,204,2,2,204,2,3,187,2,4,187,2,5,187,2,6,187,2,7,187,2,8,238,3,8,204],"secondary":false},{"width":7,"bonus":55,"chr":"2","pixels":[1,8,255,2,1,187,2,6,153,2,8,187,3,1,204,3,5,153,3,8,187,4,1,187,4,2,153,4,4,204,4,8,187],"secondary":false},{"width":7,"bonus":50,"chr":"3","pixels":[0,8,204,1,1,187,1,8,187,2,1,187,2,4,187,2,8,204,3,2,221,3,3,204,3,5,204,3,7,170],"secondary":false},{"width":7,"bonus":80,"chr":"4","pixels":[0,6,238,1,4,187,1,6,187,2,3,170,2,6,187,3,1,187,3,2,153,3,6,204,4,1,187,4,2,187,4,3,187,4,4,187,4,5,187,4,6,238,4,7,187,4,8,187],"secondary":false},{"width":7,"bonus":70,"chr":"5","pixels":[1,1,238,1,2,187,1,3,187,1,4,187,1,8,204,2,1,187,2,4,187,2,8,187,3,1,187,3,4,204,3,8,204,4,5,238,4,6,187,4,7,221],"secondary":false},{"width":7,"bonus":80,"chr":"6","pixels":[0,3,170,0,4,255,0,5,255,0,6,238,0,7,153,1,2,187,1,8,187,2,1,204,2,4,187,2,8,187,3,1,187,3,4,204,3,8,187,4,5,221,4,6,255,4,7,187],"secondary":false},{"width":7,"bonus":55,"chr":"7","pixels":[0,1,187,1,1,187,1,8,204,2,1,187,2,6,238,2,7,153,3,1,187,3,3,153,3,4,221,4,1,255,4,2,187],"secondary":false},{"width":7,"bonus":95,"chr":"8","pixels":[1,2,238,1,3,221,1,6,204,1,7,221,2,1,204,2,4,204,2,5,170,2,8,221,3,1,187,3,4,170,3,8,187,4,1,221,4,4,170,4,5,204,4,8,187,5,2,170,5,3,153,5,6,238,5,7,238],"secondary":false},{"width":7,"bonus":85,"chr":"9","pixels":[1,2,221,1,3,187,1,4,238,1,8,153,2,1,204,2,5,221,2,8,187,3,1,187,3,5,187,3,8,204,4,1,187,4,7,170,5,2,153,5,3,238,5,4,255,5,5,255,5,6,187],"secondary":false},{"width":8,"bonus":75,"chr":"%","pixels":[0,3,255,0,8,255,1,2,255,1,4,255,1,7,255,2,3,255,2,6,255,3,5,255,4,4,255,4,7,255,5,3,255,5,6,255,5,8,255,6,2,255,6,7,255],"secondary":false},{"width":4,"bonus":40,"chr":"/","pixels":[0,7,153,0,8,238,0,9,221,1,4,187,1,5,238,1,6,170,2,1,221,2,2,221],"secondary":false},{"width":7,"bonus":60,"chr":"+","pixels":[0,5,221,1,5,255,2,5,255,3,2,153,3,3,221,3,4,221,3,5,255,3,6,221,3,7,221,3,8,204,4,5,255,5,5,255],"secondary":false},{"width":5,"bonus":40,"chr":"?","pixels":[0,1,170,1,1,255,1,6,221,1,8,255,2,1,255,2,5,170,3,2,255,3,3,221],"secondary":false},{"width":2,"bonus":35,"chr":"!","pixels":[0,1,170,0,2,187,0,3,187,0,4,187,0,5,187,0,6,170,0,8,255],"secondary":false},{"width":8,"bonus":130,"chr":"@","pixels":[0,4,255,0,5,255,0,6,221,0,7,255,0,8,187,1,3,221,1,9,238,2,2,221,2,5,255,2,6,238,2,7,255,2,10,153,3,2,255,3,4,255,3,8,204,3,10,187,4,2,238,4,4,255,4,8,255,5,3,238,5,4,255,5,5,221,5,6,221,5,7,221,5,8,238,6,8,221],"secondary":false},{"width":8,"bonus":120,"chr":"#","pixels":[0,6,255,1,3,255,1,6,255,1,7,170,1,8,238,2,1,170,2,2,238,2,3,255,2,4,221,2,5,170,2,6,255,3,3,255,3,6,255,4,3,255,4,4,153,4,5,204,4,6,255,4,7,238,4,8,187,5,1,255,5,2,187,5,3,255,5,6,255,6,3,255],"secondary":false},{"width":6,"bonus":70,"chr":"$","pixels":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,0,204,2,1,238,2,8,238,2,9,204,3,1,238,3,5,238,3,8,255,4,6,170,4,7,170],"secondary":false},{"width":6,"bonus":40,"chr":"^","pixels":[0,4,153,0,5,238,1,2,204,1,3,221,2,1,221,2,2,221,3,3,187,3,4,221],"secondary":false},{"width":6,"bonus":20,"chr":"~","pixels":[1,5,255,2,5,221,3,6,221,4,5,204],"secondary":false},{"width":7,"bonus":95,"chr":"&","pixels":[0,6,187,1,2,238,1,3,255,1,4,187,1,5,187,1,8,187,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,4,255,4,8,187,5,3,204,5,4,255,5,5,221,5,6,187,6,4,153],"secondary":false},{"width":6,"bonus":45,"chr":"*","pixels":[0,2,170,1,2,170,1,3,204,1,4,255,2,1,204,2,2,238,2,3,255,3,2,170,3,4,153],"secondary":false},{"width":4,"bonus":55,"chr":"(","pixels":[0,3,173,0,4,239,0,5,253,0,6,230,0,7,171,1,1,194,1,2,204,1,8,204,1,9,191,2,0,210,2,10,216],"secondary":false},{"width":4,"bonus":55,"chr":")","pixels":[1,0,211,1,10,216,2,1,194,2,2,203,2,8,203,2,9,191,3,3,174,3,4,240,3,5,253,3,6,229,3,7,171],"secondary":false},{"width":7,"bonus":30,"chr":"_","pixels":[0,9,153,1,9,255,2,9,255,3,9,255,4,9,255,5,9,255],"secondary":false},{"width":4,"bonus":15,"chr":"-","pixels":[0,5,255,1,5,255,2,5,255],"secondary":true},{"width":8,"bonus":50,"chr":"=","pixels":[0,4,255,0,6,255,1,4,255,1,6,255,2,4,255,2,6,255,3,4,255,3,6,255,4,4,255,4,6,255],"secondary":false},{"width":3,"bonus":55,"chr":"[","pixels":[0,0,204,0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,0,238,1,8,238],"secondary":false},{"width":3,"bonus":55,"chr":"]","pixels":[0,0,238,0,8,238,1,0,204,1,1,221,1,2,221,1,3,221,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204],"secondary":false},{"width":5,"bonus":50,"chr":"{","pixels":[0,5,153,1,2,170,1,3,221,1,4,221,1,5,204,1,6,255,1,7,221,1,8,170,2,1,238,2,9,238],"secondary":false},{"width":5,"bonus":50,"chr":"}","pixels":[1,1,238,1,9,238,2,2,170,2,3,221,2,4,221,2,5,204,2,6,255,2,7,221,2,8,170,3,5,153],"secondary":false},{"width":3,"bonus":10,"chr":":","pixels":[1,3,255,1,7,255],"secondary":true},{"width":3,"bonus":20,"chr":";","pixels":[0,9,201,1,3,255,1,7,241,1,8,255],"secondary":true},{"width":3,"bonus":20,"chr":"\\"","pixels":[0,1,255,0,2,255,2,1,255,2,2,255],"secondary":true},{"width":2,"bonus":10,"chr":"\'","pixels":[0,1,255,0,2,177],"secondary":true},{"width":7,"bonus":40,"chr":"<","pixels":[0,5,204,1,5,255,2,4,238,2,6,238,3,4,170,3,6,170,4,3,221,4,7,221],"secondary":false},{"width":7,"bonus":45,"chr":">","pixels":[0,3,204,0,7,204,1,7,187,2,4,238,2,6,255,3,4,170,3,5,153,3,6,204,4,5,255],"secondary":false},{"width":5,"bonus":35,"chr":"\\\\","pixels":[1,1,153,1,2,255,1,3,204,2,5,255,2,6,204,3,8,255,3,9,204],"secondary":false},{"width":2,"bonus":5,"chr":".","pixels":[0,8,255],"secondary":true},{"width":3,"bonus":15,"chr":",","pixels":[0,9,205,1,7,205,1,8,255],"secondary":true},{"width":3,"bonus":50,"chr":"|","pixels":[0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,221,0,9,221,0,10,204],"secondary":false}],"width":10,"spacewidth":3,"shadow":false,"height":12,"basey":8}'); + +/***/ }), + +/***/ "./src/fonts/aa_8px_mono_allcaps.fontmeta.json": +/*!*****************************************************!*\ + !*** ./src/fonts/aa_8px_mono_allcaps.fontmeta.json ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"chars":[{"width":3,"bonus":35,"chr":"!","pixels":[0,2,170,1,1,221,1,2,255,1,3,221,1,4,187,1,5,170,1,9,204],"secondary":false},{"width":6,"bonus":20,"chr":"\\"","pixels":[1,2,221,1,3,255,3,2,221,3,3,255],"secondary":true},{"width":8,"bonus":125,"chr":"#","pixels":[0,7,187,1,4,255,1,7,255,1,10,170,2,3,170,2,4,255,2,5,255,2,6,221,2,7,255,2,8,170,3,4,255,3,7,255,4,4,255,4,5,153,4,7,255,4,8,238,4,9,255,4,10,204,5,2,238,5,3,204,5,4,255,5,5,153,5,7,255,6,4,255,6,7,153],"secondary":false},{"width":7,"bonus":115,"chr":"$","pixels":[0,8,187,1,2,255,1,3,255,1,4,221,1,9,238,2,1,187,2,4,255,2,5,204,2,8,170,2,9,255,2,10,221,3,0,187,3,1,238,3,2,187,3,3,170,3,4,153,3,5,255,3,6,221,3,9,221,4,1,221,4,6,255,4,7,255,4,8,255],"secondary":false},{"width":12,"bonus":135,"chr":"%","pixels":[1,2,255,1,3,255,1,4,221,2,5,153,3,1,153,3,9,187,4,1,170,4,2,255,4,3,255,4,4,221,4,7,238,4,8,204,5,4,153,5,5,238,5,6,153,6,1,153,6,2,187,6,3,204,6,6,221,6,7,255,6,8,255,7,1,153,7,9,187,8,9,187,9,6,221,9,7,255,9,8,255],"secondary":false},{"width":11,"bonus":190,"chr":"&","pixels":[0,6,187,0,7,255,0,8,170,1,2,204,1,3,255,1,4,153,1,5,238,1,6,170,1,7,187,1,8,255,1,9,153,2,1,170,2,2,153,2,3,153,2,4,255,2,5,187,2,9,238,3,1,221,3,5,238,3,6,170,3,9,255,4,1,238,4,6,238,4,7,153,4,9,204,5,1,187,5,2,187,5,7,255,5,8,204,6,7,170,6,8,255,7,5,238,7,6,255,7,7,170,7,8,170,7,9,221,8,9,238,9,9,153],"secondary":false},{"width":4,"bonus":10,"chr":"\'","pixels":[1,2,204,1,3,255],"secondary":true},{"width":4,"bonus":50,"chr":"(","pixels":[0,3,170,0,4,238,0,5,255,0,6,221,0,7,153,1,1,153,1,2,221,1,3,153,1,7,170,1,8,238],"secondary":false},{"width":4,"bonus":40,"chr":")","pixels":[1,1,170,1,2,221,1,7,170,1,8,238,2,3,187,2,4,238,2,5,255,2,6,204],"secondary":false},{"width":5,"bonus":25,"chr":"*","pixels":[1,1,170,1,2,221,1,3,153,2,2,255,2,3,204],"secondary":false},{"width":8,"bonus":45,"chr":"+","pixels":[1,6,255,2,6,255,3,4,255,3,5,255,3,6,255,3,7,255,3,8,255,4,6,255,5,6,255],"secondary":false},{"width":3,"bonus":10,"chr":",","pixels":[1,8,187,1,9,221],"secondary":true},{"width":5,"bonus":20,"chr":"-","pixels":[0,7,204,1,7,255,2,7,238,3,7,187],"secondary":true},{"width":3,"bonus":5,"chr":".","pixels":[0,9,204],"secondary":true},{"width":7,"bonus":40,"chr":"/","pixels":[0,9,221,1,7,187,1,8,187,2,6,221,3,4,221,4,2,170,4,3,187,5,1,187],"secondary":false},{"width":8,"bonus":105,"chr":"0","pixels":[0,6,153,1,3,221,1,4,255,1,5,255,1,6,255,1,7,255,1,8,238,2,2,187,2,8,153,2,9,204,3,2,187,3,9,204,4,2,221,4,9,187,5,3,238,5,4,255,5,5,255,5,6,255,5,7,255,5,8,221,6,5,153],"secondary":false},{"width":6,"bonus":85,"chr":"1","pixels":[1,3,170,1,9,153,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,3,2,153,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221],"secondary":false},{"width":8,"bonus":100,"chr":"2","pixels":[1,2,187,1,3,153,1,9,255,2,2,187,2,8,221,2,9,255,3,2,221,3,7,221,3,9,255,4,2,187,4,3,238,4,4,187,4,5,238,4,6,238,4,9,255,5,3,221,5,4,255,5,5,170,5,8,153,5,9,238],"secondary":false},{"width":7,"bonus":100,"chr":"3","pixels":[0,2,170,0,8,170,0,9,204,1,2,221,1,9,238,2,2,238,2,5,221,2,9,221,3,2,221,3,3,187,3,4,204,3,5,255,3,6,153,3,9,187,4,3,238,4,4,153,4,6,255,4,7,255,4,8,255,5,7,153],"secondary":false},{"width":8,"bonus":85,"chr":"4","pixels":[0,7,153,1,6,187,1,7,255,2,5,187,2,7,255,3,4,187,3,7,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,7,255,5,9,204,6,7,221],"secondary":false},{"width":7,"bonus":95,"chr":"5","pixels":[0,8,153,0,9,221,1,2,255,1,3,187,1,4,238,1,9,221,2,2,255,2,4,187,2,5,170,2,9,204,3,2,255,3,5,255,3,9,170,4,2,255,4,5,204,4,6,255,4,7,255,4,8,238,5,7,153],"secondary":false},{"width":8,"bonus":105,"chr":"6","pixels":[0,7,153,1,4,153,1,5,255,1,6,255,1,7,255,1,8,255,2,4,204,2,9,221,3,3,170,3,5,153,3,9,204,4,2,153,4,5,187,4,9,204,5,6,238,5,7,170,5,8,187,5,9,153,6,6,187,6,7,255,6,8,170],"secondary":false},{"width":7,"bonus":75,"chr":"7","pixels":[0,2,204,0,3,187,1,2,255,1,9,187,2,2,255,2,7,238,2,8,255,2,9,170,3,2,255,3,5,221,3,6,204,4,2,255,4,3,204,4,4,170,5,2,204],"secondary":false},{"width":8,"bonus":120,"chr":"8","pixels":[1,3,221,1,4,204,1,6,187,1,7,255,1,8,255,2,2,187,2,4,204,2,5,221,2,6,153,2,9,221,3,2,153,3,5,255,3,9,187,4,2,187,4,5,238,4,6,204,4,9,204,5,2,170,5,3,255,5,4,238,5,6,238,5,7,255,5,8,255,6,7,153],"secondary":false},{"width":8,"bonus":95,"chr":"9","pixels":[0,4,153,1,3,255,1,4,255,1,5,255,2,2,187,2,6,153,3,2,204,3,6,153,3,9,153,4,2,221,4,7,153,4,8,204,5,3,255,5,4,255,5,5,255,5,6,255,5,7,187,6,4,153,6,5,153],"secondary":false},{"width":3,"bonus":10,"chr":":","pixels":[0,3,204,0,7,204],"secondary":true},{"width":3,"bonus":20,"chr":";","pixels":[0,2,204,0,6,153,0,7,187,0,8,153],"secondary":true},{"width":7,"bonus":55,"chr":"<","pixels":[0,6,187,0,7,153,1,6,221,1,7,238,2,5,153,3,5,238,3,8,238,4,5,153,4,8,187,5,4,187,5,9,153],"secondary":false},{"width":7,"bonus":60,"chr":"=","pixels":[0,5,255,0,8,255,1,5,255,1,8,255,2,5,255,2,8,255,3,5,255,3,8,255,4,5,255,4,8,255,5,5,221,5,8,221],"secondary":false},{"width":7,"bonus":50,"chr":">","pixels":[0,4,204,0,9,170,1,5,170,1,8,187,2,5,238,2,8,221,3,7,153,4,6,238,4,7,238,5,6,153],"secondary":false},{"width":6,"bonus":65,"chr":"?","pixels":[0,2,153,0,3,187,1,2,221,1,7,221,2,2,238,2,6,238,2,10,204,3,2,204,3,3,221,3,4,204,3,5,255,4,3,238,4,4,221],"secondary":false},{"width":11,"bonus":180,"chr":"@","pixels":[0,4,187,0,5,255,0,6,255,0,7,238,1,3,170,1,8,204,2,5,187,2,6,238,2,7,187,2,9,204,3,4,204,3,5,153,3,6,153,3,7,204,3,9,204,4,3,153,4,6,153,4,9,187,5,0,153,5,3,221,5,4,170,5,5,238,5,6,255,5,7,187,5,9,170,6,3,221,6,4,153,6,7,238,7,1,153,7,7,170,8,1,170,8,2,153,8,6,170,9,3,187,9,4,221,9,5,170],"secondary":false},{"width":9,"bonus":110,"chr":"A","pixels":[1,9,238,2,6,153,2,7,255,2,8,170,2,9,170,3,4,187,3,5,238,3,7,221,4,2,187,4,3,255,4,4,238,4,7,221,5,4,221,5,5,255,5,6,238,5,7,238,6,6,187,6,7,255,6,8,255,6,9,187,7,8,170,7,9,255],"secondary":false},{"width":7,"bonus":150,"chr":"B","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,255,3,2,221,3,5,221,3,9,204,4,2,187,4,3,255,4,4,255,4,5,170,4,6,255,4,7,170,4,8,187,4,9,187,5,6,153,5,7,255,5,8,204],"secondary":false},{"width":8,"bonus":120,"chr":"C","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,3,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,221,5,2,221,5,9,221,6,2,187,6,3,187,6,8,153,6,9,170],"secondary":false},{"width":10,"bonus":165,"chr":"D","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,9,221,4,2,238,4,9,221,5,2,221,5,9,204,6,2,153,6,3,238,6,8,187,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,8,5,187,8,6,170],"secondary":false},{"width":7,"bonus":110,"chr":"E","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,170,2,9,239,3,2,214,3,5,221,3,9,212,4,2,212,4,5,226,4,9,238],"secondary":false},{"width":7,"bonus":100,"chr":"F","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,2,221,3,5,221,4,2,238,4,5,238],"secondary":false},{"width":9,"bonus":135,"chr":"G","pixels":[0,4,170,0,5,238,0,6,255,0,7,187,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,238,5,2,238,5,9,221,6,2,204,6,6,255,6,7,255,6,8,255,6,9,204,7,6,204,7,7,153,7,8,153],"secondary":false},{"width":10,"bonus":175,"chr":"H","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,5,221,4,5,221,5,5,221,6,2,204,6,3,153,6,4,153,6,5,238,6,6,153,6,7,153,6,8,153,6,9,221,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255],"secondary":false},{"width":5,"bonus":80,"chr":"I","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,153,2,9,221],"secondary":false},{"width":6,"bonus":90,"chr":"J","pixels":[2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,187,3,2,204,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,153],"secondary":false},{"width":10,"bonus":140,"chr":"K","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,187,2,7,153,2,8,153,2,9,204,3,5,238,3,6,238,4,6,170,4,7,255,5,2,238,5,3,153,5,7,170,5,8,255,6,2,204,6,8,170,6,9,238,7,9,204],"secondary":false},{"width":7,"bonus":95,"chr":"L","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,9,221,4,9,221,5,9,204],"secondary":false},{"width":12,"bonus":150,"chr":"M","pixels":[1,6,170,1,7,221,1,8,255,1,9,255,2,2,170,2,3,255,2,4,255,2,5,221,3,4,204,3,5,255,3,6,238,4,6,204,4,7,255,4,8,221,5,7,187,5,8,255,6,6,221,7,4,238,7,5,204,8,2,187,8,3,255,8,4,255,8,5,255,8,6,255,8,7,238,8,8,204,8,9,187,9,7,170,9,8,204,9,9,255],"secondary":false},{"width":10,"bonus":130,"chr":"N","pixels":[1,2,204,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,3,221,2,4,238,3,4,221,3,5,238,4,5,238,4,6,238,5,6,238,5,7,238,6,7,238,6,8,238,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,204],"secondary":false},{"width":10,"bonus":155,"chr":"O","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,170,2,8,204,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,238,6,8,170,7,3,238,7,4,255,7,5,255,7,6,255,7,7,255,7,8,187,8,4,153,8,5,221,8,6,204],"secondary":false},{"width":8,"bonus":130,"chr":"P","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,1,238,2,2,153,2,3,153,2,4,153,2,5,170,2,6,153,2,7,153,2,8,153,2,9,221,3,1,204,4,1,238,4,5,187,5,1,153,5,2,255,5,3,255,5,4,255,6,3,153],"secondary":false},{"width":10,"bonus":180,"chr":"Q","pixels":[0,4,153,0,5,238,0,6,238,0,7,170,1,3,221,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,8,221,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,221,6,8,153,6,9,238,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,7,9,187,7,10,153,8,4,153,8,5,204,8,6,204,8,10,255,9,10,204],"secondary":false},{"width":7,"bonus":140,"chr":"R","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,238,2,7,153,2,8,153,2,9,221,3,2,238,3,6,238,4,2,204,4,3,204,4,4,153,4,5,204,4,6,204,4,7,255,5,3,221,5,4,221,5,8,255,6,9,238],"secondary":false},{"width":6,"bonus":115,"chr":"S","pixels":[0,3,221,0,4,238,0,8,187,0,9,187,1,2,187,1,4,204,1,5,255,1,9,238,2,2,187,2,5,255,2,6,187,2,9,221,3,2,204,3,5,153,3,6,255,3,7,170,3,8,153,3,9,170,4,2,204,4,3,153,4,6,170,4,7,255,4,8,187],"secondary":false},{"width":9,"bonus":105,"chr":"T","pixels":[1,2,238,2,2,221,3,2,238,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,2,221,6,2,221,7,2,255],"secondary":false},{"width":10,"bonus":120,"chr":"U","pixels":[1,2,204,1,3,153,1,4,153,1,5,153,1,6,153,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,3,9,221,4,9,238,5,9,221,6,9,170,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,204,8,2,153],"secondary":false},{"width":10,"bonus":90,"chr":"V","pixels":[1,2,255,1,3,153,2,2,238,2,3,255,2,4,255,2,5,187,3,5,238,3,6,255,3,7,221,4,7,221,4,8,255,4,9,187,5,6,187,5,7,204,6,4,221,6,5,187,7,2,255,7,3,170],"secondary":false},{"width":13,"bonus":165,"chr":"W","pixels":[1,2,255,1,3,221,2,2,204,2,3,221,2,4,255,2,5,255,2,6,221,3,6,187,3,7,255,3,8,255,3,9,187,4,6,153,4,7,221,5,4,221,5,5,187,6,2,187,6,3,255,6,4,255,6,5,153,7,4,170,7,5,255,7,6,255,7,7,187,8,7,255,8,8,255,8,9,187,9,5,153,9,6,221,9,7,170,10,2,221,10,3,238,10,4,187,11,2,187],"secondary":false},{"width":9,"bonus":115,"chr":"X","pixels":[1,2,221,1,9,238,2,2,255,2,3,255,2,7,153,2,8,221,2,9,153,3,3,153,3,4,255,3,5,221,3,6,204,4,5,255,4,6,255,4,7,170,5,3,187,5,4,170,5,7,255,5,8,255,5,9,153,6,2,255,6,8,204,6,9,255,7,9,170],"secondary":false},{"width":8,"bonus":95,"chr":"Y","pixels":[0,2,187,1,2,255,1,3,221,2,3,221,2,4,255,2,5,153,3,5,238,3,6,255,3,7,255,3,8,255,3,9,255,4,5,204,4,6,170,4,7,153,4,8,153,4,9,204,5,3,187,5,4,187,6,2,238],"secondary":false},{"width":8,"bonus":105,"chr":"Z","pixels":[0,9,204,1,2,238,1,7,153,1,8,255,1,9,255,2,2,221,2,6,221,2,7,255,2,9,221,3,2,221,3,4,153,3,5,255,3,6,221,3,9,221,4,2,238,4,3,221,4,4,255,4,9,221,5,2,255,5,3,204,5,9,255],"secondary":false},{"width":4,"bonus":65,"chr":"[","pixels":[0,0,255,0,1,255,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,0,9,255,0,10,187,1,0,187,1,10,170],"secondary":false},{"width":8,"bonus":40,"chr":"\\\\","pixels":[1,1,170,1,2,187,2,3,221,3,5,221,4,6,187,4,7,187,5,8,221,6,9,153],"secondary":false},{"width":5,"bonus":65,"chr":"]","pixels":[1,0,153,1,10,153,2,0,255,2,1,255,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,187],"secondary":false},{"width":7,"bonus":40,"chr":"^","pixels":[0,5,204,1,3,238,1,4,170,2,1,238,3,1,221,3,2,204,4,3,187,4,4,238],"secondary":false},{"width":7,"bonus":30,"chr":"_","pixels":[0,10,221,1,10,221,2,10,221,3,10,221,4,10,221,5,10,221],"secondary":false},{"width":9,"bonus":110,"chr":"a","pixels":[1,9,238,2,6,153,2,7,255,2,8,170,2,9,170,3,4,187,3,5,238,3,7,221,4,2,187,4,3,255,4,4,238,4,7,221,5,4,221,5,5,255,5,6,238,5,7,238,6,6,187,6,7,255,6,8,255,6,9,187,7,8,170,7,9,255],"secondary":false},{"width":7,"bonus":150,"chr":"b","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,255,3,2,221,3,5,221,3,9,204,4,2,187,4,3,255,4,4,255,4,5,170,4,6,255,4,7,170,4,8,187,4,9,187,5,6,153,5,7,255,5,8,204],"secondary":false},{"width":8,"bonus":120,"chr":"c","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,3,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,221,5,2,221,5,9,221,6,2,187,6,3,187,6,8,153,6,9,170],"secondary":false},{"width":10,"bonus":165,"chr":"d","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,9,221,4,2,238,4,9,221,5,2,221,5,9,204,6,2,153,6,3,238,6,8,187,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,8,5,187,8,6,170],"secondary":false},{"width":7,"bonus":110,"chr":"e","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,5,221,3,9,221,4,2,238,4,5,238,4,9,238],"secondary":false},{"width":7,"bonus":100,"chr":"f","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,2,221,3,5,221,4,2,238,4,5,238],"secondary":false},{"width":10,"bonus":135,"chr":"g","pixels":[0,4,170,0,5,238,0,6,255,0,7,187,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,238,5,2,238,5,9,221,6,2,204,6,6,255,6,7,255,6,8,255,6,9,204,7,6,204,7,7,153,7,8,153],"secondary":false},{"width":10,"bonus":175,"chr":"h","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,5,221,4,5,221,5,5,221,6,2,204,6,3,153,6,4,153,6,5,238,6,6,153,6,7,153,6,8,153,6,9,221,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255],"secondary":false},{"width":5,"bonus":80,"chr":"i","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,153,2,9,221],"secondary":false},{"width":5,"bonus":90,"chr":"j","pixels":[2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,187,3,2,204,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,153],"secondary":false},{"width":9,"bonus":140,"chr":"k","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,187,2,7,153,2,8,153,2,9,204,3,5,238,3,6,238,4,6,170,4,7,255,5,2,238,5,3,153,5,7,170,5,8,255,6,2,204,6,8,170,6,9,238,7,9,204],"secondary":false},{"width":7,"bonus":95,"chr":"l","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,9,221,4,9,221,5,9,204],"secondary":false},{"width":12,"bonus":150,"chr":"m","pixels":[1,6,170,1,7,221,1,8,255,1,9,255,2,2,170,2,3,255,2,4,255,2,5,221,3,4,204,3,5,255,3,6,238,4,6,204,4,7,255,4,8,221,5,7,187,5,8,255,6,6,221,7,4,238,7,5,204,8,2,187,8,3,255,8,4,255,8,5,255,8,6,255,8,7,238,8,8,204,8,9,187,9,7,170,9,8,204,9,9,255],"secondary":false},{"width":10,"bonus":130,"chr":"n","pixels":[1,2,204,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,3,221,2,4,238,3,4,221,3,5,238,4,5,238,4,6,238,5,6,238,5,7,238,6,7,238,6,8,238,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,204],"secondary":false},{"width":10,"bonus":155,"chr":"o","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,170,2,8,204,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,238,6,8,170,7,3,238,7,4,255,7,5,255,7,6,255,7,7,255,7,8,187,8,4,153,8,5,221,8,6,204],"secondary":false},{"width":7,"bonus":115,"chr":"p","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,170,2,7,153,2,8,153,2,9,221,3,2,221,4,2,221,4,3,204,4,4,153,4,5,221,5,3,221,5,4,221],"secondary":false},{"width":10,"bonus":180,"chr":"q","pixels":[0,4,153,0,5,238,0,6,238,0,7,170,1,3,221,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,8,221,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,221,6,8,153,6,9,238,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,7,9,187,7,10,153,8,4,153,8,5,204,8,6,204,8,10,255,9,10,204],"secondary":false},{"width":9,"bonus":145,"chr":"r","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,238,2,7,153,2,8,153,2,9,221,3,2,238,3,6,238,4,2,204,4,3,204,4,4,153,4,5,204,4,6,204,4,7,255,5,3,221,5,4,221,5,8,255,6,9,238,7,9,153],"secondary":false},{"width":6,"bonus":115,"chr":"s","pixels":[0,3,221,0,4,238,0,8,187,0,9,187,1,2,187,1,4,204,1,5,255,1,9,238,2,2,187,2,5,255,2,6,187,2,9,221,3,2,204,3,5,153,3,6,255,3,7,170,3,8,153,3,9,170,4,2,204,4,3,153,4,6,170,4,7,255,4,8,187],"secondary":false},{"width":9,"bonus":105,"chr":"t","pixels":[1,2,238,2,2,221,3,2,238,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,2,221,6,2,221,7,2,255],"secondary":false},{"width":10,"bonus":120,"chr":"u","pixels":[1,2,204,1,3,153,1,4,153,1,5,153,1,6,153,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,3,9,221,4,9,238,5,9,221,6,9,170,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,204,8,2,153],"secondary":false},{"width":10,"bonus":90,"chr":"v","pixels":[1,2,255,1,3,153,2,2,238,2,3,255,2,4,255,2,5,187,3,5,238,3,6,255,3,7,221,4,7,221,4,8,255,4,9,187,5,6,187,5,7,204,6,4,221,6,5,187,7,2,255,7,3,170],"secondary":false},{"width":13,"bonus":165,"chr":"w","pixels":[1,2,255,1,3,221,2,2,204,2,3,221,2,4,255,2,5,255,2,6,221,3,6,187,3,7,255,3,8,255,3,9,187,4,6,153,4,7,221,5,4,221,5,5,187,6,2,187,6,3,255,6,4,255,6,5,153,7,4,170,7,5,255,7,6,255,7,7,187,8,7,255,8,8,255,8,9,187,9,5,153,9,6,221,9,7,170,10,2,221,10,3,238,10,4,187,11,2,187],"secondary":false},{"width":9,"bonus":115,"chr":"x","pixels":[1,2,221,1,9,238,2,2,255,2,3,255,2,7,153,2,8,221,2,9,153,3,3,153,3,4,255,3,5,221,3,6,204,4,5,255,4,6,255,4,7,170,5,3,187,5,4,170,5,7,255,5,8,255,5,9,153,6,2,255,6,8,204,6,9,255,7,9,170],"secondary":false},{"width":8,"bonus":95,"chr":"y","pixels":[0,2,187,1,2,255,1,3,221,2,3,221,2,4,255,2,5,153,3,5,238,3,6,255,3,7,255,3,8,255,3,9,255,4,5,204,4,6,170,4,7,153,4,8,153,4,9,204,5,3,187,5,4,187,6,2,238],"secondary":false},{"width":8,"bonus":105,"chr":"z","pixels":[0,9,204,1,2,238,1,7,153,1,8,255,1,9,255,2,2,221,2,6,221,2,7,255,2,9,221,3,2,221,3,4,153,3,5,255,3,6,221,3,9,221,4,2,238,4,3,221,4,4,255,4,9,221,5,2,255,5,3,204,5,9,255],"secondary":false},{"width":4,"bonus":45,"chr":"{","pixels":[1,1,255,1,2,255,1,3,255,1,5,187,1,6,255,1,7,255,1,8,255,1,9,221,2,0,153],"secondary":false},{"width":2,"bonus":60,"chr":"|","pixels":[0,0,255,0,1,255,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,0,9,255,0,10,255,0,11,255],"secondary":true},{"width":4,"bonus":45,"chr":"}","pixels":[0,0,153,1,1,255,1,2,255,1,3,255,1,5,187,1,6,255,1,7,255,1,8,255,1,9,221],"secondary":false},{"width":7,"bonus":30,"chr":"~","pixels":[0,5,221,1,4,255,2,4,187,3,5,187,4,5,255,5,4,204],"secondary":false}],"width":13,"spacewidth":3,"shadow":false,"height":12,"basey":9}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_63941__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_63941__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __nested_webpack_exports__ = __nested_webpack_require_63941__("./src/dialog/index.ts"); +/******/ +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +/***/ }), + +/***/ "../node_modules/alt1/dist/ocr/index.js": +/*!**********************************************!*\ + !*** ../node_modules/alt1/dist/ocr/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js")); + else {} +})(globalThis, (__WEBPACK_EXTERNAL_MODULE_alt1_base__) => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/ocr/index.ts": +/*!**************************!*\ + !*** ./src/ocr/index.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, exports, __nested_webpack_require_728__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.generatefont = exports.readChar = exports.readSmallCapsBackwards = exports.readLine = exports.getChatColor = exports.GetChatColorMono = exports.findReadLine = exports.findChar = exports.decompose3col = exports.decomposeblack = exports.decompose2col = exports.canblend = exports.unblendTrans = exports.unblendKnownBg = exports.unblendBlackBackground = exports.debugFont = exports.debugout = exports.debug = void 0; +const base_1 = __nested_webpack_require_728__(/*! alt1/base */ "alt1/base"); +exports.debug = { + printcharscores: false, + trackread: false +}; +exports.debugout = {}; +/** + * draws the font definition to a buffer and displays it in the dom for debugging purposes + * @param font + */ +function debugFont(font) { + var spacing = font.width + 2; + var buf = new base_1.ImageData(spacing * font.chars.length, font.height + 1); + for (var a = 0; a < buf.data.length; a += 4) { + buf.data[a] = buf.data[a + 1] = buf.data[a + 2] = 0; + buf.data[a + 3] = 255; + } + for (var a = 0; a < font.chars.length; a++) { + var bx = a * spacing; + var chr = font.chars[a]; + for (var b = 0; b < chr.pixels.length; b += (font.shadow ? 4 : 3)) { + buf.setPixel(bx + chr.pixels[b], chr.pixels[b + 1], [chr.pixels[b + 2], chr.pixels[b + 2], chr.pixels[b + 2], 255]); + if (font.shadow) { + buf.setPixel(bx + chr.pixels[b], chr.pixels[b + 1], [chr.pixels[b + 3], 0, 0, 255]); + } + } + } + buf.show(); +} +exports.debugFont = debugFont; +function unblendBlackBackground(img, r, g, b) { + var rimg = new base_1.ImageData(img.width, img.height); + for (var i = 0; i < img.data.length; i += 4) { + var col = decomposeblack(img.data[i], img.data[i + 1], img.data[i + 2], r, g, b); + rimg.data[i + 0] = col[0] * 255; + rimg.data[i + 1] = rimg.data[i + 0]; + rimg.data[i + 2] = rimg.data[i + 0]; + rimg.data[i + 3] = 255; + } + return rimg; +} +exports.unblendBlackBackground = unblendBlackBackground; +/** + * unblends a imagebuffer into match strength with given color + * the bgimg argument should contain a second image with pixel occluded by the font visible. + * @param img + * @param shadow detect black as second color + * @param bgimg optional second image to + */ +function unblendKnownBg(img, bgimg, shadow, r, g, b) { + if (bgimg && (img.width != bgimg.width || img.height != bgimg.height)) { + throw "bgimg size doesn't match"; + } + var rimg = new base_1.ImageData(img.width, img.height); + var totalerror = 0; + for (var i = 0; i < img.data.length; i += 4) { + var col = decompose2col(img.data[i], img.data[i + 1], img.data[i + 2], r, g, b, bgimg.data[i + 0], bgimg.data[i + 1], bgimg.data[i + 2]); + if (shadow) { + if (col[2] > 0.01) { + console.log("high error component: " + (col[2] * 100).toFixed(1) + "%"); + } + totalerror += col[2]; + var m = 1 - col[1] - Math.abs(col[2]); //main color+black=100%-bg-error + rimg.data[i + 0] = m * 255; + rimg.data[i + 1] = col[0] / m * 255; + rimg.data[i + 2] = rimg.data[i + 0]; + } + else { + rimg.data[i + 0] = col[0] * 255; + rimg.data[i + 1] = rimg.data[i + 0]; + rimg.data[i + 2] = rimg.data[i + 0]; + } + rimg.data[i + 3] = 255; + } + return rimg; +} +exports.unblendKnownBg = unblendKnownBg; +/** + * Unblends a font image that is already conpletely isolated to the raw image used ingame. This is the easiest mode for pixel fonts where alpha is 0 or 255, or for extracted font files. + * @param img + * @param r + * @param g + * @param b + * @param shadow whether the font has a black shadow + */ +function unblendTrans(img, shadow, r, g, b) { + var rimg = new base_1.ImageData(img.width, img.height); + var pxlum = r + g + b; + for (var i = 0; i < img.data.length; i += 4) { + if (shadow) { + var lum = img.data[i + 0] + img.data[i + 1] + img.data[i + 2]; + rimg.data[i + 0] = img.data[i + 3]; + rimg.data[i + 1] = lum / pxlum * 255; + rimg.data[i + 2] = rimg.data[i + 0]; + } + else { + rimg.data[i + 0] = img.data[i + 3]; + rimg.data[i + 1] = rimg.data[i + 0]; + rimg.data[i + 2] = rimg.data[i + 0]; + } + rimg.data[i + 3] = 255; + } + return rimg; +} +exports.unblendTrans = unblendTrans; +/** + * Determised wether color [rgb]m can be a result of a blend with color [rgb]1 that is p (0-1) of the mix + * It returns the number that the second color has to lie outside of the possible color ranges + * @param rm resulting color + * @param r1 first color of the mix (the other color is unknown) + * @param p the portion of the [rgb]1 in the mix (0-1) + */ +function canblend(rm, gm, bm, r1, g1, b1, p) { + var m = Math.min(50, p / (1 - p)); + var r = rm + (rm - r1) * m; + var g = gm + (gm - g1) * m; + var b = bm + (bm - b1) * m; + return Math.max(0, -r, -g, -b, r - 255, g - 255, b - 255); +} +exports.canblend = canblend; +/** + * decomposes a color in 2 given component colors and returns the amount of each color present + * also return a third (noise) component which is the the amount leftover orthagonal from the 2 given colors + */ +function decompose2col(rp, gp, bp, r1, g1, b1, r2, g2, b2) { + //get the normal of the error (cross-product of both colors) + var r3 = g1 * b2 - g2 * b1; + var g3 = b1 * r2 - b2 * r1; + var b3 = r1 * g2 - r2 * g1; + //normalize to length 255 + var norm = 255 / Math.sqrt(r3 * r3 + g3 * g3 + b3 * b3); + r3 *= norm; + g3 *= norm; + b3 *= norm; + return decompose3col(rp, gp, bp, r1, g1, b1, r2, g2, b2, r3, g3, b3); +} +exports.decompose2col = decompose2col; +/** + * decomposes a pixel in a given color component and black and returns what proportion of the second color it contains + * this is not as formal as decompose 2/3 and only give a "good enough" number + */ +function decomposeblack(rp, gp, bp, r1, g1, b1) { + var dr = Math.abs(rp - r1); + var dg = Math.abs(gp - g1); + var db = Math.abs(bp - b1); + var maxdif = Math.max(dr, dg, db); + return [1 - maxdif / 255]; +} +exports.decomposeblack = decomposeblack; +/** + * decomposes a color in 3 given component colors and returns the amount of each color present + */ +function decompose3col(rp, gp, bp, r1, g1, b1, r2, g2, b2, r3, g3, b3) { + //P=x*C1+y*C2+z*C3 + //assemble as matrix + //M*w=p + //get inverse of M + //dirty written out version of cramer's rule + var A = g2 * b3 - b2 * g3; + var B = g3 * b1 - b3 * g1; + var C = g1 * b2 - b1 * g2; + var D = b2 * r3 - r2 * b3; + var E = b3 * r1 - r3 * b1; + var F = b1 * r2 - r1 * b2; + var G = r2 * g3 - g2 * r3; + var H = r3 * g1 - g3 * r1; + var I = r1 * g2 - g1 * r2; + var det = r1 * A + g1 * D + b1 * G; + //M^-1*p=w + var x = (A * rp + D * gp + G * bp) / det; + var y = (B * rp + E * gp + H * bp) / det; + var z = (C * rp + F * gp + I * bp) / det; + return [x, y, z]; +} +exports.decompose3col = decompose3col; +/** + * brute force to the exact position of the text + */ +function findChar(buffer, font, col, x, y, w, h) { + if (x < 0) { + return null; + } + if (y - font.basey < 0) { + return null; + } + if (x + w + font.width > buffer.width) { + return null; + } + if (y + h - font.basey + font.height > buffer.height) { + return null; + } + var best = 1000; //TODO finetune score constants + var bestchar = null; + for (var cx = x; cx < x + w; cx++) { + for (var cy = y; cy < y + h; cy++) { + var chr = readChar(buffer, font, col, cx, cy, false, false); + if (chr != null && chr.sizescore < best) { + best = chr.sizescore; + bestchar = chr; + } + } + } + return bestchar; +} +exports.findChar = findChar; +/** + * reads text with unknown exact coord or color. The given coord should be inside the text + * color selection not implemented yet + */ +function findReadLine(buffer, font, cols, x, y, w = -1, h = -1) { + if (w == -1) { + w = font.width + font.spacewidth; + x -= Math.ceil(w / 2); + } + if (h == -1) { + h = 7; + y -= 1; + } + var chr = null; + if (cols.length > 1) { + //TODO use getChatColor() instead for non-mono? + var sorted = GetChatColorMono(buffer, new base_1.Rect(x, y - font.basey, w, h), cols); + //loop until we have a match (max 2 cols) + for (var a = 0; a < 2 && a < sorted.length && chr == null; a++) { + chr = findChar(buffer, font, sorted[a].col, x, y, w, h); + } + } + else { + chr = findChar(buffer, font, cols[0], x, y, w, h); + } + if (chr == null) { + return { debugArea: { x, y, w, h }, text: "", fragments: [] }; + } + return readLine(buffer, font, cols, chr.x, chr.y, true, true); +} +exports.findReadLine = findReadLine; +function GetChatColorMono(buf, rect, colors) { + var colormap = colors.map(c => ({ col: c, score: 0 })); + if (rect.x < 0 || rect.y < 0 || rect.x + rect.width > buf.width || rect.y + rect.height > buf.height) { + return colormap; + } + var data = buf.data; + var maxd = 50; + for (var colobj of colormap) { + var score = 0; + var col = colobj.col; + for (var y = rect.y; y < rect.y + rect.height; y++) { + for (var x = rect.x; x < rect.x + rect.width; x++) { + var i = x * 4 + y * 4 * buf.width; + var d = Math.abs(data[i] - col[0]) + Math.abs(data[i + 1] - col[1]) + Math.abs(data[i + 2] - col[2]); + if (d < maxd) { + score += maxd - d; + } + } + } + colobj.score = score; + } + return colormap.sort((a, b) => b.score - a.score); +} +exports.GetChatColorMono = GetChatColorMono; +function unblend(r, g, b, R, G, B) { + var m = Math.sqrt(r * r + g * g + b * b); + var n = Math.sqrt(R * R + G * G + B * B); + var x = (r * R + g * G + b * B) / n; + var y = Math.sqrt(Math.max(0, m * m - x * x)); + var r1 = Math.max(0, (63.75 - y) * 4); + var r2 = x / n * 255; + if (r2 > 255) //brighter than refcol + { + r1 = Math.max(0, r1 - r2 + 255); + r2 = 255; + } + return [r1, r2]; +} +function getChatColor(buf, rect, colors) { + var bestscore = -1.0; + var best = null; + var b2 = 0.0; + var data = buf.data; + for (let col of colors) { + var score = 0.0; + for (var y = rect.y; y < rect.y + rect.height; y++) { + for (var x = rect.x; x < rect.x + rect.width; x++) { + if (x < 0 || x + 1 >= buf.width) { + continue; + } + if (y < 0 || y + 1 >= buf.width) { + continue; + } + let i1 = buf.pixelOffset(x, y); + let i2 = buf.pixelOffset(x + 1, y + 1); + var pixel1 = unblend(data[i1 + 0], data[i1 + 1], data[i1 + 2], col[0], col[1], col[2]); + var pixel2 = unblend(data[i2 + 0], data[i2 + 1], data[i2 + 2], col[0], col[1], col[2]); + //TODO this is from c# can simplify a bit + var s = (pixel1[0] / 255 * pixel1[1] / 255) * (pixel2[0] / 255 * (255.0 - pixel2[1]) / 255); + score += s; + } + } + if (score > bestscore) { + b2 = bestscore; + bestscore = score; + best = col; + } + else if (score > b2) { + b2 = score; + } + } + //Console.WriteLine("color: " + bestcol + " - " + (bestscore - b2)); + //bestscore /= rect.width * rect.height; + return best; +} +exports.getChatColor = getChatColor; +/** + * reads a line of text with exactly known position and color. y should be the y coord of the text base line, x should be the first pixel of a new character + */ +function readLine(buffer, font, colors, x, y, forward, backward = false) { + if (typeof colors[0] != "number" && colors.length == 1) { + colors = colors[0]; + } + var multicol = typeof colors[0] != "number"; + var allcolors = multicol ? colors : [colors]; + var detectcolor = function (sx, sy, backward) { + var w = Math.floor(font.width * 1.5); + if (backward) { + sx -= w; + } + sy -= font.basey; + return getChatColor(buffer, { x: sx, y: sy, width: w, height: font.height }, allcolors); + }; + var fragments = []; + var x1 = x; + var x2 = x; + var maxspaces = (typeof font.maxspaces == "number" ? font.maxspaces : 1); + let fragtext = ""; + let fraghadprimary = false; + var lastcol = null; + let addfrag = (forward) => { + if (!fragtext) { + return; + } + let frag = { + text: fragtext, + color: lastcol, + index: 0, + xstart: x + (forward ? fragstartdx : fragenddx), + xend: x + (forward ? fragenddx : fragstartdx) + }; + if (forward) { + fragments.push(frag); + } + else { + fragments.unshift(frag); + } + fragtext = ""; + fragstartdx = dx; + fraghadprimary = false; + }; + for (var dirforward of [true, false]) { + //init vars + if (dirforward && !forward) { + continue; + } + if (!dirforward && !backward) { + continue; + } + var dx = 0; + var fragstartdx = dx; + var fragenddx = dx; + var triedspaces = 0; + var triedrecol = false; + var col = multicol ? null : colors; + while (true) { + col = col || detectcolor(x + dx, y, !dirforward); + var chr = (col ? readChar(buffer, font, col, x + dx, y, !dirforward, true) : null); + if (col == null || chr == null) { + if (triedspaces < maxspaces) { + dx += (dirforward ? 1 : -1) * font.spacewidth; + triedspaces++; + continue; + } + if (multicol && !triedrecol && fraghadprimary) { + dx -= (dirforward ? 1 : -1) * triedspaces * font.spacewidth; + triedspaces = 0; + col = null; + triedrecol = true; + continue; + } + if (dirforward) { + x2 = x + dx - font.spacewidth; + } + else { + x1 = x + dx + font.spacewidth; + } + break; + } + else { + if (lastcol && (col[0] != lastcol[0] || col[1] != lastcol[1] || col[2] != lastcol[2])) { + addfrag(dirforward); + } + var spaces = ""; + for (var a = 0; a < triedspaces; a++) { + spaces += " "; + } + if (dirforward) { + fragtext += spaces + chr.chr; + } + else { + fragtext = chr.chr + spaces + fragtext; + } + if (!chr.basechar.secondary) { + fraghadprimary = true; + } + triedspaces = 0; + triedrecol = false; + dx += (dirforward ? 1 : -1) * chr.basechar.width; + fragenddx = dx; + lastcol = col; + } + } + if (lastcol && fraghadprimary) { + addfrag(dirforward); + } + } + fragments.forEach((f, i) => f.index = i); + return { + debugArea: { x: x1, y: y - 9, w: x2 - x1, h: 10 }, + text: fragments.map(f => f.text).join(""), + fragments + }; +} +exports.readLine = readLine; +/** + * Reads a line of text that uses a smallcaps font, these fonts can have duplicate chars that only have a different amount of + * empty space after the char before the next char starts. + * The coordinates should be near the end of the string, or a rectangle with high 1 containing all points where the string can end. + */ +function readSmallCapsBackwards(buffer, font, cols, x, y, w = -1, h = -1) { + if (w == -1) { + w = font.width + font.spacewidth; + x -= Math.ceil(w / 2); + } + if (h == -1) { + h = 7; + y -= 1; + } + var matchedchar = null; + var sorted = (cols.length == 1 ? [{ col: cols[0], score: 1 }] : GetChatColorMono(buffer, new base_1.Rect(x, y - font.basey, w, h), cols)); + //loop until we have a match (max 2 cols) + for (var a = 0; a < 2 && a < sorted.length && matchedchar == null; a++) { + for (var cx = x + w - 1; cx >= x; cx--) { + var best = 1000; //TODO finetune score constants + var bestchar = null; + for (var cy = y; cy < y + h; cy++) { + var chr = readChar(buffer, font, sorted[a].col, cx, cy, true, false); + if (chr != null && chr.sizescore < best) { + best = chr.sizescore; + bestchar = chr; + } + } + if (bestchar) { + matchedchar = bestchar; + break; + } + } + } + if (matchedchar == null) { + return { text: "", debugArea: { x, y, w, h } }; + } + return readLine(buffer, font, cols, matchedchar.x, matchedchar.y, false, true); +} +exports.readSmallCapsBackwards = readSmallCapsBackwards; +/** + * Reads a single character at the exact given location + * @param x exact x location of the start of the character domain (includes part of the spacing between characters) + * @param y exact y location of the baseline pixel of the character + * @param backwards read in backwards direction, the x location should be the first pixel after the character domain in that case + */ +function readChar(buffer, font, col, x, y, backwards, allowSecondary) { + y -= font.basey; + var shiftx = 0; + var shifty = font.basey; + var shadow = font.shadow; + var debugobj = null; + var debugimg = null; + if (exports.debug.trackread) { + var name = x + ";" + y + " " + JSON.stringify(col); + if (!exports.debugout[name]) { + exports.debugout[name] = []; + } + debugobj = exports.debugout[name]; + } + //===== make sure the full domain is inside the bitmap/buffer ====== + if (y < 0 || y + font.height >= buffer.height) { + return null; + } + if (!backwards) { + if (x < 0 || x + font.width > buffer.width) { + return null; + } + } + else { + if (x - font.width < 0 || x > buffer.width) { + return null; + } + } + //====== start reading the char ====== + var scores = []; + for (var chr = 0; chr < font.chars.length; chr++) { + var chrobj = font.chars[chr]; + if (chrobj.secondary && !allowSecondary) { + continue; + } + scores[chr] = { score: 0, sizescore: 0, chr: chrobj }; + var chrx = (backwards ? x - chrobj.width : x); + if (exports.debug.trackread) { + debugimg = new base_1.ImageData(font.width, font.height); + } + for (var a = 0; a < chrobj.pixels.length;) { + var i = (chrx + chrobj.pixels[a]) * 4 + (y + chrobj.pixels[a + 1]) * buffer.width * 4; + var penalty = 0; + if (!shadow) { + penalty = canblend(buffer.data[i], buffer.data[i + 1], buffer.data[i + 2], col[0], col[1], col[2], chrobj.pixels[a + 2] / 255); + a += 3; + } + else { + var lum = chrobj.pixels[a + 3] / 255; + penalty = canblend(buffer.data[i], buffer.data[i + 1], buffer.data[i + 2], col[0] * lum, col[1] * lum, col[2] * lum, chrobj.pixels[a + 2] / 255); + a += 4; + } + scores[chr].score += Math.max(0, penalty); + //TODO add compiler flag to this to remove it for performance + if (debugimg) { + debugimg.setPixel(chrobj.pixels[a], chrobj.pixels[a + 1], [penalty, penalty, penalty, 255]); + } + } + scores[chr].sizescore = scores[chr].score - chrobj.bonus; + if (debugobj) { + debugobj.push({ chr: chrobj.chr, score: scores[chr].sizescore, rawscore: scores[chr].score, img: debugimg }); + } + } + scores.sort((a, b) => a.sizescore - b.sizescore); + if (exports.debug.printcharscores) { + scores.slice(0, 5).forEach(q => console.log(q.chr.chr, q.score.toFixed(3), q.sizescore.toFixed(3))); + } + var winchr = scores[0]; + if (!winchr || winchr.score > 400) { + return null; + } + return { chr: winchr.chr.chr, basechar: winchr.chr, x: x + shiftx, y: y + shifty, score: winchr.score, sizescore: winchr.sizescore }; +} +exports.readChar = readChar; +/** + * Generates a font json description to use in reader functions + * @param unblended A source image with all characters lined up. The image should be unblended into components using the unblend functions + * The lowest pixel line of this image is used to mark the location and size of the charecters if the red component is 255 it means there is a character on that pixel column + * @param chars A string containing all the characters of the image in the same order + * @param seconds A string with characters that are considered unlikely and should only be detected if no other character is possible. + * For example the period (.) character matches positive inside many other characters and should be marked as secondary + * @param bonusses An object that contains bonus scores for certain difficult characters to make the more likely to be red. + * @param basey The y position of the baseline pixel of the font + * @param spacewidth the number of pixels a space takes + * @param treshold minimal color match proportion (0-1) before a pixel is used for the font + * @param shadow whether this font also uses the black shadow some fonts have. The "unblended" image should be unblended correspondingly + * @returns a javascript object describing the font which is used as input for the different read functions + */ +function generatefont(unblended, chars, seconds, bonusses, basey, spacewidth, treshold, shadow) { + //settings vars + treshold *= 255; + //initial vars + var miny = unblended.height - 1; + var maxy = 0; + var font = { chars: [], width: 0, spacewidth: spacewidth, shadow: shadow, height: 0, basey: 0 }; + var ds = false; + var chardata = []; + //index all chars + for (var dx = 0; dx < unblended.width; dx++) { + var i = 4 * dx + 4 * unblended.width * (unblended.height - 1); + if (unblended.data[i] == 255 && unblended.data[i + 3] == 255) { + if (ds === false) { + ds = dx; + } + } + else { + if (ds !== false) { + //char found, start detection + var de = dx; + var char = chars[chardata.length]; + var chr = { + ds: ds, + de: de, + width: de - ds, + chr: char, + bonus: (bonusses && bonusses[char]) || 0, + secondary: seconds.indexOf(chars[chardata.length]) != -1, + pixels: [] + }; + chardata.push(chr); + font.width = Math.max(font.width, chr.width); + for (x = 0; x < de - ds; x++) { + for (y = 0; y < unblended.height - 1; y++) { + var i = (x + ds) * 4 + y * unblended.width * 4; + if (unblended.data[i] >= treshold) { + miny = Math.min(miny, y); + maxy = Math.max(maxy, y); + } + } + } + ds = false; + } + } + } + font.height = maxy + 1 - miny; + font.basey = basey - miny; + //detect all pixels + for (var a in chardata) { + var chr = chardata[a]; + for (var x = 0; x < chr.width; x++) { + for (var y = 0; y < maxy + 1 - miny; y++) { + var i = (x + chr.ds) * 4 + (y + miny) * unblended.width * 4; + if (unblended.data[i] >= treshold) { + chr.pixels.push(x, y); + chr.pixels.push(unblended.data[i]); + if (shadow) { + chr.pixels.push(unblended.data[i + 1]); + } + chr.bonus += 5; + } + } + } + //prevent js from doing the thing with unnecessary output precision + chr.bonus = +chr.bonus.toFixed(3); + font.chars.push({ width: chr.width, bonus: chr.bonus, chr: chr.chr, pixels: chr.pixels, secondary: chr.secondary }); + } + return font; +} +exports.generatefont = generatefont; + + +/***/ }), + +/***/ "alt1/base": +/*!**************************************************************************************************!*\ + !*** external {"root":"A1lib","commonjs2":"alt1/base","commonjs":"alt1/base","amd":"alt1/base"} ***! + \**************************************************************************************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_alt1_base__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_26177__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_26177__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __nested_webpack_exports__ = __nested_webpack_require_26177__("./src/ocr/index.ts"); +/******/ +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ var scriptUrl; +/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + ""; +/******/ var document = __webpack_require__.g.document; +/******/ if (!scriptUrl && document) { +/******/ if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') +/******/ scriptUrl = document.currentScript.src; +/******/ if (!scriptUrl) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ if(scripts.length) { +/******/ var i = scripts.length - 1; +/******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src; +/******/ } +/******/ } +/******/ } +/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration +/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic. +/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser"); +/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/"); +/******/ __webpack_require__.p = scriptUrl; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!******************!*\ + !*** ./index.ts ***! + \******************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _modules_dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _modules_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/settings */ "./modules/settings.ts"); +/* harmony import */ var _modules_slayer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/slayer */ "./modules/slayer.ts"); +/* harmony import */ var _modules_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/logger */ "./modules/logger.ts"); +/* harmony import */ var _index_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.html */ "./index.html"); +/* harmony import */ var _appconfig_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./appconfig.json */ "./appconfig.json"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + + + +/* COPYRIGHT NOTICE - DO NOT REMOVE + 2021 @ Unlishema Dragonsworn + I have programmed this enitre app myself; however, I must give credit where credit is due. + + The credits have been moved into their own file @ https://slayer.unlishema.org/pages/credits.html +*/ +/* + ~~~ Slayer Assistant App ~~~ + Features coming in the near future (Also my current TODO List) + + ~ Before Release for Sure ~ + Update the about page. (Will need updated again on next release) + Update the changelog page. (Will need updated again on next release) + Update the credits page. (Will need updated again on next release) + + ~ Coming Next Release ~ + Adjust where the CNAME for the app on github is located for source update (Done) + Upload the source of the app to github so we won't lose it again (Ready but source needs Tested First) + Adjust the DNS Record for https://slayer.unlishema.org to point at https://unlishema.github.io/slayerassistant/dist instead for new update because the source is the main dir + Add ability to load the database through a php file instead of the json (Done, except for reapers.json) + - We will still use a json database in the app but the php file will build the json via MySQL (Done) + - The php file will be creatures.json via the .htaccess file (Done) + - http://slayer.unlishema.org/data/creatures.json will load http://slayer.unlishema.org/data/creatures.php?q=all (Done) + - Add other features to the database query php even if the app don't use them yet (Coming in the future) + -- Example: http://slayer.unlishema.org/data/creatures.php?q=Dragon&l=10 + -- l=100 could limit results, d could have it give extra details, q could also be setup for seaching, and so on + Adjust the caching of the json database files to make sure they get updated timely (use .htaccess and mode_expires.c) + - This may not be needed once I change over to the php file instead. (Doesn't seem to be needed anymore, more testing required) + + ~ Coming Very Soon Maybe even next Release ~ + Add in a status tracking area to keep track of xp/hr, kills/hr, and more (Needs finished) + Add settings into the app finally (Needs rest added) + Adjust histories to use sessionStorage + Make it show if it detects your using alt1toolkit or not and warn a users of the features they are missing without using alt1toolkit. + - Also add into settings ability to hide this warning. Also add setting to turn off injection of the alt1 app. + + ~ Near future Release ~ + Add support for Ushubti + + ~ Settings for the app ~ + Settings: + - Ability to toggle on and off Debug and Verbose mode + - Ability to toggle auto find task via dialog (Done) + - Ability to toggle auto find current task via Slayer Count RS3UI (Done) + - Ability to toggle extra info to make box smaller without scrollbar (Done) + - Ability to toggle all hidden creatures + -- Ability to toggle sub-classes of hidden creatures like (elite), (dragonkin lab) and such + - Ability to select default loading + -- Default Task(s) on open and adjust doc based on it (Done, Partially) + -- Load previous task(s) and adjust doc based on it + - Ability to select defaults for everything (Later On) + -- Select default creature per task + -- Select default variant per creature + - Ability to customize the Look N Feel of the Slayer Assistant UI (Way Later On) + - Ability to select how long to save search history (Way Later On) + - Ability to select the type of search algo for the app (Maybe Later On) + - Ability to toggle warnings (eg. Missing Features due to not on Alt1Toolkit, Missing Data, and so on...) + - Ability to turn off app injection (This will fix issues where a user can't inject into the client) + +*/ +if (window.alt1) + alt1.identifyAppUrl("./appconfig.json"); +// Initialize the JavaScript for the app +document.addEventListener("DOMContentLoaded", function () { return __awaiter(void 0, void 0, void 0, function () { + var error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + // Setup the main document and load assignment index + return [4 /*yield*/, _modules_dochandler__WEBPACK_IMPORTED_MODULE_0__.main.setup.documentMain()]; + case 1: + // Setup the main document and load assignment index + _a.sent(); + // Run the Config Setup Process + return [4 /*yield*/, _modules_settings__WEBPACK_IMPORTED_MODULE_1__.controller.load()]; + case 2: + // Run the Config Setup Process + _a.sent(); + // Start the capture loop at the configured interval + setInterval(function () { + _modules_slayer__WEBPACK_IMPORTED_MODULE_2__.findTask(); + }, _modules_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.autoCapture.loopTimer); + return [3 /*break*/, 4]; + case 3: + error_1 = _a.sent(); + console.error("Initialization error:", error_1); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); +}); }); +// Save settings before closing the app +document.addEventListener("beforeunload", function () { return __awaiter(void 0, void 0, void 0, function () { + var error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, _modules_settings__WEBPACK_IMPORTED_MODULE_1__.controller.save()]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + error_2 = _a.sent(); + _modules_logger__WEBPACK_IMPORTED_MODULE_3__.error("Error saving settings:", error_2); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); +}); }); + +})(); + +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/dist/main.js.map b/dist/main.js.map new file mode 100644 index 0000000..adb8612 --- /dev/null +++ b/dist/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","mappings":"AAAA;AACA;AACA,2EAA2E,MAAM,2BAA2B,aAAa,qDAAqD,MAAM,4BAA4B,aAAa,qDAAqD,MAAM,qCAAqC,aAAa;AAC1U;AACA;AACA;AACA,uFAAuF,MAAM,2BAA2B,aAAa,qDAAqD,MAAM,4BAA4B,aAAa,qDAAqD,MAAM,qCAAqC,aAAa;AACtV;AACA;AACA,CAAC;AACD,O;;;;;;;;;ACVA,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;ACA/C,eAAe,6FAAgC;;;;;;;;;;;;;;;;ACA/C,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,uBAAuB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gBAAgB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,2BAA2B;AAC7F;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA,8DAA8D,gBAAgB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,yBAAyB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,4BAA4B;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;;;;;;;;;;;;;;;;;;;;ACjL3B,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC8B;AACS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,6BAA6B,mDAAuB;AACpD;AACA;AACA,4CAA4C,oDAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qGAAqG;AACrG;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC6B;;;;;;;;;;;;;;;;;;;;;;AC/G9B,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC8B;AACE;AACO;AACvC,WAAW,+CAAmB;AAC9B,yBAAyB,mBAAO,CAAC,+FAA6C;AAC9E,yBAAyB,mBAAO,CAAC,+FAA6C;AAC9E,yBAAyB,mBAAO,CAAC,+FAA6C;AAC9E,yBAAyB,mBAAO,CAAC,+FAA6C;AAC9E,0BAA0B,mBAAO,CAAC,iGAA8C;AAChF,0BAA0B,mBAAO,CAAC,iGAA8C;AAChF,0BAA0B,mBAAO,CAAC,iGAA8C;AAChF,0BAA0B,mBAAO,CAAC,iGAA8C;AAChF,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mDAAuB;AAC5D;AACA;AACA,mDAAmD,mBAAO,CAAC,+EAAqC,uBAAuB,kBAAkB;AACzI;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAO,CAAC,6EAAoC,uBAAuB,kBAAkB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,0CAA0C;AAC1H,+EAA+E,2CAA2C;AAC1H,gFAAgF,2CAA2C;AAC3H,+EAA+E,4CAA4C;AAC3H,gFAAgF,yCAAyC;AACzH,+EAA+E,0CAA0C;AACzH,gFAAgF,0CAA0C;AAC1H,+EAA+E,2CAA2C;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gBAAgB;AACpE;AACA;AACA,yEAAyE,iDAAmB;AAC5F,iDAAiD,0CAAc;AAC/D;AACA;AACA,wCAAwC,kDAAgB;AACxD;AACA;AACA,iDAAiD,kDAAgB;AACjE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,CAAC;AAC0B;;;;;;;;;;;;;;;;;AC9H3B,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA,sDAAsD,gBAAgB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;ACpGA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AAC2C;AAC3C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA,4BAA4B,uDAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;ACnEA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AAC2C;AAC3C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA,4BAA4B,uDAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;ACnEA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;AC9FA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AAC2C;AAC3C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA,4BAA4B,uDAAU;AACtC,6DAA6D,gBAAgB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AAC0C;AAC1C;AACgD;AACF;AACJ;AACE;AACF;AACA;AACA;AAC1C;AACO;AACP,eAAe,iDAAQ;AACvB,eAAe,iDAAQ;AACvB;AACA,eAAe,iDAAQ;AACvB;AACA;AACA;;;;;;;;;;;;;;;;;;AClBA;AAC4C;AAC5C;AACO;AACP,qBAAqB,iDAAmB;AACxC;AACA;AACA;AACA;AACA;AACO;AACP,qBAAqB,iDAAmB;AACxC;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACA;AACwC;AACI;AACA;AACD;AACA;AACS;AACL;AACF;AACT;AACpC;AACO;AACP;AACA;AACA,mCAAmC;AACnC,kCAAkC;AAClC;AACA;AACA;AACA;AACA,oBAAoB,wDAA0B;AAC9C,2BAA2B,gDAAkB;AAC7C;AACA,yBAAyB,iDAAmB,oBAAoB,2DAA6B;AAC7F,wBAAwB,4DAA8B;AACtD;AACA;AACA;AACA;AACA,mCAAmC,iDAAmB;AACtD;AACA;AACA,kCAAkC,iDAAmB;AACrD;AACA,oBAAoB,wCAAU;AAC9B,yCAAyC,+CAAY;AACrD;AACA;AACA;AACA;AACA,6BAA6B,iDAAmB,qBAAqB,2DAA6B;AAClG,6CAA6C,iDAAmB;AAChE;AACA;AACA,sCAAsC,gEAAkC;AACxE;AACA;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB;AAC5D,wBAAwB,iDAAmB,2CAA2C,yDAA2B;AACjH;AACA;AACA,oBAAoB,4DAA8B;AAClD;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB,IAAI,iDAAmB;AACvB;AACA,uBAAuB,iDAAmB;AAC1C;AACA,0BAA0B,iDAAmB;AAC7C;AACA;AACA,IAAI,iDAAmB,qCAAqC,yDAA2B;AACvF,IAAI,iDAAmB,yCAAyC,yDAA2B;AAC3F,IAAI,iDAAmB,qCAAqC,yDAA2B;AACvF;AACA;AACO;AACP;AACA;AACA,mCAAmC;AACnC,kCAAkC;AAClC;AACA;AACA;AACA;AACA,oBAAoB,wDAA0B;AAC9C,2BAA2B,gDAAkB;AAC7C;AACA,yBAAyB,iDAAmB,oBAAoB,2DAA6B;AAC7F,wBAAwB,4DAA8B;AACtD;AACA;AACA;AACA;AACA,mCAAmC,iDAAmB;AACtD;AACA,oBAAoB,wCAAU;AAC9B,yCAAyC,gDAAa;AACtD;AACA;AACA;AACA;AACA,iDAAiD,iDAAmB,qBAAqB,2DAA6B;AACtH,6CAA6C,iDAAmB;AAChE;AACA;AACA,yHAAyH,mDAAqB,gBAAgB,mDAAqB;AACnL,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAyB;AACjD;AACA;AACA,oBAAoB,4DAA8B;AAClD;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0DAA4B;AAChE;AACA;AACA;AACA,oCAAoC,0DAA4B;AAChE;AACA;AACA;AACA;AACA,oBAAoB,wDAA0B;AAC9C,2BAA2B,gDAAkB;AAC7C,kCAAkC,iDAAmB;AACrD;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC,wBAAwB,iDAAmB,gCAAgC,yDAA2B;AACtG,qCAAqC,iDAAmB;AACxD;AACA;AACA,4BAA4B,iDAAmB,2CAA2C,yDAA2B;AACrH;AACA,wBAAwB,4DAA8B;AACtD;AACA;AACA;AACA,oBAAoB,wCAAU;AAC9B,oBAAoB,iDAAmB;AACvC;AACA,wBAAwB,iDAAmB;AAC3C,oDAAoD,8CAAW,SAAS,mDAAe;AACvF;AACA;AACA;AACA,wBAAwB,4DAA8B;AACtD;AACA;AACA;AACA,oBAAoB,iDAAmB;AACvC,oBAAoB,iDAAmB;AACvC,oBAAoB,iDAAmB,gCAAgC,yDAA2B;AAClG,wBAAwB,2DAA6B;AACrD;AACA,wBAAwB,iDAAmB,2CAA2C,yDAA2B;AACjH;AACA,2BAA2B,iDAAmB,qBAAqB,2DAA6B;AAChG,oBAAoB,iDAAmB;AACvC;AACA;AACA;AACA;AACA;AACA,yCAAyC,8CAAW;AACpD;AACA;AACA;AACA,oBAAoB,iDAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAmB,2EAA2E,OAAO,kDAAoB,gBAAgB;AACjK;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C,4BAA4B,iDAAmB;AAC/C;AACA,oCAAoC,8BAA8B;AAClE,4BAA4B,iDAAmB,oGAAoG;AACnJ;AACA,wBAAwB,iDAAmB;AAC3C;AACA;AACA,wBAAwB,iDAAmB;AAC3C,wBAAwB,iDAAmB,+DAA+D;AAC1G;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C,4BAA4B,iDAAmB;AAC/C;AACA,oCAAoC,8BAA8B;AAClE,4BAA4B,iDAAmB,uGAAuG;AACtJ;AACA,wBAAwB,iDAAmB;AAC3C;AACA;AACA,wBAAwB,iDAAmB;AAC3C,wBAAwB,iDAAmB,kEAAkE;AAC7G;AACA;AACA;AACA,wBAAwB,iDAAmB;AAC3C,6DAA6D,gBAAgB;AAC7E;AACA,iCAAiC,qDAAuB;AACxD;AACA,gCAAgC,iDAAmB,gFAAgF,mDAAqB,QAAQ,mDAAqB;AACrL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAA0B;AAClD;AACA;AACA,wBAAwB,wDAA0B;AAClD;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;ACpT4C;AACJ;AACjC;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,IAAI,iDAAmB;AACvB;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,IAAI,iDAAmB;AACvB;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,IAAI,iDAAmB;AACvB;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,IAAI,iDAAmB;AACvB;;;;;;;;;;;;;;;;;;;;;ACzB4C;AACJ;AACjC;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC;AACA;AACA,yCAAyC,OAAO,mEAAqC,MAAM;AAC3F,IAAI,iDAAmB;AACvB,6CAA6C,OAAO,mEAAqC,MAAM;AAC/F;AACA;AACA,IAAI,iDAAmB;AACvB;AACA;AACA;AACA;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC;AACA;AACA,yCAAyC,OAAO,iEAAmC,MAAM;AACzF,IAAI,iDAAmB;AACvB,6CAA6C,OAAO,iEAAmC,MAAM;AAC7F;AACA;AACA,IAAI,iDAAmB;AACvB;AACA;AACA;AACA;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,6CAA6C,OAAO,uDAAyB,MAAM;AACnF,IAAI,iDAAmB;AACvB;AACA;AACA;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,6CAA6C,OAAO,2DAA6B,MAAM;AACvF,IAAI,iDAAmB;AACvB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnDA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC4C;AACD;AACS;AACZ;AACJ;AACA;AACpC;AACO;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kBAAkB;AACZ;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,sBAAsB;AAChB;AACP;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,0DAA4B;AAC7E;AACA;AACA,6CAA6C,0DAA4B;AACzE;AACA;AACA;AACA;AACA,4BAA4B,6CAAe,cAAc,uCAAuC;AAChG;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,0DAA4B;AAC7E;AACA;AACA;AACA;AACA,4BAA4B,6CAAe,cAAc,+BAA+B;AACxF;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,sDAAwB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,6CAAe,cAAc,+BAA+B;AACxF;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,mDAAqB;AAClE;AACA;AACA;AACA;AACA,4BAA4B,6CAAe,cAAc,iCAAiC;AAC1F;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,iDAAmB,kFAAkF;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iDAAmB;AAC3B,QAAQ,oDAAsB;AAC9B;AACA;AACA,CAAC,kBAAkB;AACZ;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iDAAmB;AACxD;AACA,gGAAgG,kBAAkB;AAClH;AACA;AACA;AACA,wBAAwB,iDAAmB,8CAA8C,uDAAyB;AAClH,wBAAwB,iDAAmB,8CAA8C,0DAA4B;AACrH,wBAAwB,iDAAmB,gDAAgD,oDAAsB;AACjH,wBAAwB,iDAAmB,8CAA8C,6CAAe;AACxG,wBAAwB,iDAAmB,iDAAiD,6CAAe;AAC3G,wBAAwB,iDAAmB,+DAA+D,gDAAkB,KAAK;AACjI,wBAAwB,iDAAmB,+CAA+C,oDAAsB;AAChH,wBAAwB,iDAAmB,8DAA8D,gDAAkB,KAAK;AAChI,wBAAwB,iDAAmB;AAC3C;AACA;AACA,oCAAoC,iDAAmB,aAAa,6CAAe;AACnF;AACA;AACA,oCAAoC,iDAAmB,aAAa,6CAAe;AACnF;AACA;AACA,yBAAyB;AACzB,6CAA6C,uDAAoB;AACjE;AACA;AACA,wBAAwB,iDAAmB;AAC3C,6CAA6C,4DAAwB;AACrE;AACA;AACA,wBAAwB,iDAAmB;AAC3C;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAmB;AACzD;AACA,gGAAgG,kBAAkB;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gDAAkB;AACjE;AACA,mHAAmH,kBAAkB;AACrI;AACA;AACA;AACA,wCAAwC,iDAAmB,gEAAgE,OAAO,kDAAoB,iBAAiB;AACvK,wCAAwC,iDAAmB,oEAAoE,OAAO,6DAA+B,MAAM;AAC3K,8CAA8C,iDAAmB;AACjE,oDAAoD,iDAAmB;AACvE;AACA,yHAAyH,kBAAkB;AAC3I;AACA;AACA;AACA,wCAAwC,iDAAmB,6EAA6E,OAAO,mEAAqC,MAAM;AAC1L,wCAAwC,iDAAmB,iFAAiF,OAAO,iEAAmC,MAAM;AAC5L,wCAAwC,iDAAmB,qEAAqE,OAAO,wDAA0B,MAAM;AACvK,wCAAwC,iDAAmB,uEAAuE,OAAO,uDAAyB,MAAM;AACxK,wCAAwC,iDAAmB,wEAAwE,OAAO,4DAA8B,MAAM;AAC9K,wCAAwC,iDAAmB,0EAA0E,OAAO,2DAA6B,MAAM;AAC/K,wCAAwC,iDAAmB,oEAAoE,OAAO,kDAAoB,eAAe;AACzK,wCAAwC,iDAAmB,wEAAwE,OAAO,2DAA6B,MAAM;AAC7K,wCAAwC,iDAAmB,iEAAiE,OAAO,wDAA0B,MAAM;AACnK,wCAAwC,iDAAmB,gEAAgE,OAAO,uDAAyB,MAAM;AACjK;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAmB;AACzD;AACA,kGAAkG,kBAAkB;AACpH;AACA;AACA,+BAA+B,gDAAkB;AACjD;AACA,mGAAmG,kBAAkB;AACrH;AACA;AACA;AACA,wBAAwB,iDAAmB,gEAAgE,OAAO,kDAAoB,iBAAiB;AACvJ,wBAAwB,iDAAmB,oEAAoE,OAAO,6DAA+B,MAAM;AAC3J,8BAA8B,iDAAmB;AACjD,oCAAoC,iDAAmB;AACvD;AACA,yGAAyG,kBAAkB;AAC3H;AACA;AACA;AACA,wBAAwB,iDAAmB,6EAA6E,OAAO,mEAAqC,MAAM;AAC1K,wBAAwB,iDAAmB,iFAAiF,OAAO,iEAAmC,MAAM;AAC5K,wBAAwB,iDAAmB,qEAAqE,OAAO,wDAA0B,MAAM;AACvJ,wBAAwB,iDAAmB,uEAAuE,OAAO,uDAAyB,MAAM;AACxJ,wBAAwB,iDAAmB,wEAAwE,OAAO,4DAA8B,MAAM;AAC9J,wBAAwB,iDAAmB,0EAA0E,OAAO,2DAA6B,MAAM;AAC/J,wBAAwB,iDAAmB,oEAAoE,OAAO,kDAAoB,eAAe;AACzJ,wBAAwB,iDAAmB,wEAAwE,OAAO,2DAA6B,MAAM;AAC7J,wBAAwB,iDAAmB,iEAAiE,OAAO,wDAA0B,MAAM;AACnJ,wBAAwB,iDAAmB,gEAAgE,OAAO,uDAAyB,MAAM;AACjJ;AACA;AACA,wCAAwC,iDAAmB;AAC3D,4BAA4B,iDAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAmB;AACzD;AACA,qGAAqG,kBAAkB;AACvH;AACA;AACA,sCAAsC,iDAAmB;AACzD;AACA,gFAAgF,+EAA+E;AAC/J;AACA;AACA,0CAA0C,iDAAmB;AAC7D;AACA,gFAAgF,OAAO,gDAAkB,sBAAsB;AAC/H;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iDAAmB;AAC7C,4BAA4B,iDAAmB;AAC/C,+BAA+B,iDAAmB;AAClD,YAAY,iDAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AAChB;AACP;AACA;AACA;AACA,2BAA2B,iDAAmB;AAC9C,iCAAiC,iDAAmB;AACpD,0BAA0B,iDAAmB;AAC7C;AACA,YAAY,iDAAmB;AAC/B;AACA;AACA,YAAY,iDAAmB;AAC/B;AACA;AACA;AACA,CAAC,wBAAwB;;;;;;;;;;;;;;;;;;;;;AC3jBmB;AACJ;AACxC;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ,iDAAmB;AAC3B,QAAQ,oDAAsB;AAC9B;AACA;AACA,KAAK;AACL;AACO;AACP;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC,uBAAuB,iDAAmB;AAC1C,sBAAsB,iDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC,qBAAqB,iDAAmB;AACxC;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;;;;;;;;;;;;;;;;;;;;;AC3DuB;AACJ;AACxC;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,IAAI,iDAAmB;AACvB;AACA;AACO;AACP,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,IAAI,iDAAmB;AACvB;AACA;AACO;AACP;AACA,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,6BAA6B,iDAAmB;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,iDAAmB;AAC3B;AACA,eAAe,gDAAkB;AACjC,gCAAgC,iDAAmB;AACnD;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACrCA;AACO;AACP;AACA,yCAAyC;AACzC;AACA,yCAAyC;AACzC,0CAA0C,EAAE;AAC5C;AACA;AACO;AACP,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,aAAa;AACb;AACA;AACO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA,wCAAwC;AACxC;AACA;AACO;AACP;AACA;AACA,4CAA4C;AAC5C;AACA;AACO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC2C;AACR;AACO;AACP;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wCAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F,kBAAkB;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAU;AAClC,wBAAwB,mDAAU;AAClC,wBAAwB,mDAAU;AAClC,wBAAwB,mDAAU;AAClC;AACA,6CAA6C,iDAAQ,UAAU,wEAAwE,IAAI,wEAAwE;AACnN;AACA;AACA;AACA;AACA;AACA,6CAA6C,iDAAQ,UAAU,wEAAwE;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;AAC3B;AACP;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mDAAU;AAClB,QAAQ,mDAAU;AAClB,QAAQ,mDAAU;AAClB,QAAQ,mDAAU;AAClB;AACA;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA,YAAY,iDAAQ;AACpB;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AAClB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iDAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AAClB;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA,oBAAoB,wCAAU;AAC9B;AACA;AACA;AACA;AACA,oBAAoB,wCAAU;AAC9B;AACA;AACA;AACA,oBAAoB,6CAAe;AACnC;AACA;AACA;AACA,oBAAoB,+CAAiB;AACrC;AACA;AACA;AACA,yCAAyC,kDAAoB;AAC7D;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC,wBAAwB,wCAAU;AAClC,wBAAwB,wCAAU;AAClC,wBAAwB,wCAAU;AAClC,wBAAwB,wCAAU;AAClC;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB;AAC5D;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC,wBAAwB,wCAAU;AAClC,wBAAwB,wCAAU;AAClC;AACA,4BAA4B,wCAAU,0BAA0B,eAAe;AAC/E;AACA;AACA,4BAA4B,wCAAU,yBAAyB,eAAe;AAC9E;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC,8BAA8B,iDAAmB;AACjD;AACA,4BAA4B,wCAAU;AACtC;AACA;AACA,8BAA8B,iDAAmB;AACjD;AACA,4BAA4B,wCAAU;AACtC;AACA;AACA;AACA,4BAA4B,wCAAU;AACtC;AACA,4BAA4B,wCAAU;AACtC;AACA,4BAA4B,wCAAU;AACtC,kEAAkE,gBAAgB;AAClF;AACA,gCAAgC,wCAAU;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wCAAU;AAC9B;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7bA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AAC8B;AACsB;AACM;AACN;AACb;AACI;AACR;AACnC;AACO,qBAAqB,6DAAe;AACpC,uBAAuB,mEAAkB;AACzC,wBAAwB,6DAAe;AACvC;AACP;AACA,4BAA4B,oCAAoC,6BAA6B;AAC7F;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,mDAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,iDAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD;AACA;AACA;AACA;AACA,oBAAoB,wDAA0B;AAC9C;AACA,oBAAoB,iDAAmB;AACvC,oBAAoB,4DAA8B;AAClD,+CAA+C,iDAAmB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB,UAAU,sDAAsD;AAC5H;AACA;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB,UAAU,sDAAsD,IAAI,sDAAsD;AACtL;AACA;AACA;AACA,6CAA6C,iDAAmB,UAAU,sDAAsD;AAChI;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD,+CAA+C,iDAAmB;AAClE;AACA;AACA;AACA;AACA;AACA,yBAAyB,iDAAmB;AAC5C;AACA;AACA;AACA;AACA,oBAAoB,wDAA0B;AAC9C,iDAAiD,0DAA4B;AAC7E,yCAAyC,iDAAmB,UAAU,kDAAkD;AACxH;AACA;AACA;AACA;AACA,kDAAkD,0DAA4B;AAC9E,yCAAyC,iDAAmB,UAAU,kDAAkD;AACxH;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD,+CAA+C,iDAAmB;AAClE;AACA;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB;AAC5D;AACA;AACA;AACA;AACA,oBAAoB,mDAAqB;AACzC,oBAAoB,6CAAe;AACnC,iEAAiE,iDAAmB;AACpF;AACA,oBAAoB,oDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAwB;AAChD;AACA;AACA;AACA,wBAAwB,iDAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAU;AAClC,qCAAqC,sCAAsC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB,UAAU,+BAA+B,IAAI,+BAA+B;AACxI;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iDAAmB,UAAU,+BAA+B;AACrG;AACA;AACA;AACA,8CAA8C,iDAAmB,UAAU,+BAA+B;AAC1G;AACA;AACA;AACA;AACA,oBAAoB,4DAA8B;AAClD,0BAA0B,iDAAmB;AAC7C,+CAA+C,iDAAmB;AAClE;AACA;AACA;AACA,oBAAoB,oDAAsB;AAC1C;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpPA,gEAAgE,kDAAkD,6BAA6B;;AAE/I;;;;;;;;;;;ACFA,yEAAyE,2DAA2D,6BAA6B;;AAEjK;;;;;;;;;;;ACFA,+DAA+D,iDAAiD,6BAA6B;;AAE7I;;;;;;;;;;ACFA;AACA,IAAI,IAAyD;AAC7D,2EAA2E,MAAM,OAAO,mBAAO,CAAC,oBAAO,KAAK,aAAa,qDAAqD,MAAM,OAAO,mBAAO,CAAC,sBAAQ,KAAK,aAAa,qDAAqD,MAAM,OAAO,mBAAO,CAAC,wCAAiB,KAAK,aAAa;AAC1U,MAAM,EAK4E;AAClF,CAAC;AACD,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,gDAAgD,aAAa;;;AAG7D,OAAO;;AAEP;AACA;AACA;AACA;AACA;;;AAGA,gDAAgD,aAAa;;;AAG7D,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,+BAAmB;;;AAGrE;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA,2BAA2B,+BAAmB;AAC9C,iCAAiC,+BAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,IAAI;AACJ;AACA,iEAAiE,+BAAmB,oBAAoB,+BAAmB;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD,6BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,aAAa;AAClC;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;;AAGrE;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA,iBAAiB,gCAAmB;AACpC,4BAA4B,gCAAmB;AAC/C,iCAAiC,gCAAmB;AACpD,WAAW,gCAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,SAAS;AACT;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,qBAAqB;AACrB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC,wBAAwB,kBAAkB;AAC1C;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B,gCAAgC,SAAS;AACzC,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,MAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC,yBAAyB,qBAAqB;AAC9C,6BAA6B,sBAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY,WAAW;AACjF;AACA;AACA;AACA,qDAAqD,iBAAiB,WAAW;AACjF,yCAAyC,iDAAiD;AAC1F,0CAA0C,mCAAmC;AAC7E,sCAAsC,+BAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,gCAAmB;;;AAG7D,gDAAgD,aAAa;AAC7D;AACA,gBAAgB,gCAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;;AAGrE;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,gDAAgD,aAAa;AAC7D;AACA,gCAAmB;AACnB,mCAAmC,gCAAmB;AACtD,kCAAkC,gCAAmB;AACrD,aAAa,gCAAmB;AAChC,0CAA0C,qCAAqC,2CAA2C;AAC1H,6BAA6B,gCAAmB;AAChD,+CAA+C,qCAAqC,4CAA4C;AAChI,oCAAoC,gCAAmB;AACvD,aAAa,gCAAmB;AAChC,aAAa,gCAAmB;AAChC,oBAAoB,gCAAmB;AACvC,mDAAmD,qCAAqC,uCAAuC;AAC/H,kDAAkD,qCAAqC,sCAAsC;AAC7H,mDAAmD,qCAAqC,uCAAuC;AAC/H,mDAAmD,qCAAqC,uCAAuC;AAC/H,kDAAkD,qCAAqC,sCAAsC;;;AAG7H,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,gCAAmB;;;AAG7D;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA,gBAAgB,gCAAmB;AACnC,sBAAsB,gCAAmB;AACzC;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB,kDAAkD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB,oDAAoD;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,sCAAsC;AACrG;AACA;AACA;AACA,wDAAwD,OAAO,qDAAqD;AACpH;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;;AAGrE;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA,gBAAgB,gCAAmB;AACnC,iCAAiC,gCAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,0BAA0B;AACpC,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAkC,OAAO;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,mBAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;;AAGrE;AACA,6CAA6C;AAC7C;AACA,gDAAgD,aAAa;AAC7D;AACA,+BAA+B,gCAAmB;AAClD,iBAAiB,gCAAmB;AACpC,+BAA+B,gCAAmB;AAClD,gCAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,wBAAwB,OAAO;AAC/B;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,aAAa;AAClC,yBAAyB,aAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,WAAW,2BAA2B;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,4GAA4G,yCAAyC;AACrJ;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,yCAAyC;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA,gEAAgE,kDAAkD,6BAA6B;;AAE/I;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA,yEAAyE,2DAA2D,6BAA6B;;AAEjK;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA,+DAA+D,iDAAiD,6BAA6B;;AAE7I;;AAEA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,gCAAmB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAAmB,GAAG,gCAAmB;AACvD;AACA,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;;;;;;;;;;AClmED;AACA,IAAI,IAAyD;AAC7D,2BAA2B,mBAAO,CAAC,0DAAW,GAAG,mBAAO,CAAC,wDAAU;AACnE,MAAM,EAKiD;AACvD,CAAC;AACD,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA,0CAA0C,8BAAmB;;AAE7D,gBAAgB,8BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,+BAAmB;;AAE7D,gBAAgB,+BAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,gCAAmB;;AAE7D,gBAAgB,gCAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,gCAAmB;;AAE7D,gBAAgB,gCAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,0CAA0C,gCAAmB;;AAE7D,gBAAgB,gCAAmB;;AAEnC,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;;AAEA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D,2BAA2B,gCAAmB;AAC9C,yBAAyB,gCAAmB;AAC5C,eAAe,gCAAmB;AAClC;AACA,aAAa,gCAAmB;AAChC,kBAAkB,gCAAmB;AACrC,mBAAmB,gCAAmB;AACtC,iBAAiB,gCAAmB;AACpC,qBAAqB,gCAAmB;AACxC,WAAW,gCAAmB;AAC9B,WAAW,gCAAmB;AAC9B,CAAC;AACD;AACA,aAAa,gCAAmB;AAChC,kBAAkB,gCAAmB;AACrC,mBAAmB,gCAAmB;AACtC,iBAAiB,gCAAmB;AACpC,qBAAqB,gCAAmB;AACxC,WAAW,gCAAmB;AAC9B,WAAW,gCAAmB;AAC9B,CAAC;AACD,eAAe,gCAAmB;AAClC,gBAAgB,gCAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,QAAQ,0BAA0B;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA,8BAA8B,SAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAmD;AAC3E;AACA;AACA;AACA,wBAAwB,kDAAkD;AAC1E;AACA;AACA;AACA,wBAAwB,kDAAkD;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA,iBAAiB,iFAAiF;AAClG;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA,iBAAiB,4EAA4E;AAC7F;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,UAAU,oLAAoL,EAAE,qOAAqO,EAAE,4IAA4I,EAAE,qOAAqO,EAAE,oLAAoL,EAAE,4IAA4I,EAAE,yPAAyP,EAAE,4MAA4M,EAAE,oHAAoH,EAAE,8IAA8I,EAAE,4KAA4K,EAAE,4HAA4H,EAAE,sPAAsP,EAAE,oLAAoL,EAAE,4KAA4K,EAAE,6MAA6M,EAAE,6MAA6M,EAAE,oIAAoI,EAAE,4IAA4I,EAAE,oIAAoI,EAAE,4KAA4K,EAAE,4IAA4I,EAAE,qNAAqN,EAAE,oJAAoJ,EAAE,sKAAsK,EAAE,4KAA4K,EAAE,oMAAoM,EAAE,qQAAqQ,EAAE,4LAA4L,EAAE,6NAA6N,EAAE,oNAAoN,EAAE,4KAA4K,EAAE,qOAAqO,EAAE,qOAAqO,EAAE,4JAA4J,EAAE,4KAA4K,EAAE,oMAAoM,EAAE,4JAA4J,EAAE,6QAA6Q,EAAE,6OAA6O,EAAE,8OAA8O,EAAE,oMAAoM,EAAE,6NAA6N,EAAE,6NAA6N,EAAE,4KAA4K,EAAE,oKAAoK,EAAE,oMAAoM,EAAE,4KAA4K,EAAE,sQAAsQ,EAAE,oLAAoL,EAAE,oJAAoJ,EAAE,oLAAoL,EAAE,4MAA4M,EAAE,4IAA4I,EAAE,oJAAoJ,EAAE,4IAA4I,EAAE,4LAA4L,EAAE,4KAA4K,EAAE,4LAA4L,EAAE,oJAAoJ,EAAE,oNAAoN,EAAE,oMAAoM,EAAE,oLAAoL,EAAE,4HAA4H,EAAE,4JAA4J,EAAE,4HAA4H,EAAE,oHAAoH,EAAE,+QAA+Q,EAAE,6PAA6P,EAAE,4KAA4K,EAAE,4HAA4H,EAAE,4FAA4F,EAAE,oNAAoN,EAAE,oIAAoI,EAAE,qJAAqJ,EAAE,qJAAqJ,EAAE,4GAA4G,EAAE,mFAAmF,EAAE,4IAA4I,EAAE,oJAAoJ,EAAE,oJAAoJ,EAAE,6BAA6B,+GAA+G,EAAE,6BAA6B,+GAA+G,EAAE,2EAA2E,EAAE,6BAA6B,8DAA8D,EAAE,6FAA6F,EAAE,4EAA4E,EAAE,4HAA4H,EAAE,oIAAoI,EAAE,uHAAuH,EAAE,kEAAkE,EAAE,mFAAmF,EAAE,6IAA6I,iEAAiE;;AAEtlf,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,UAAU,oHAAoH,EAAE,6FAA6F,EAAE,uQAAuQ,EAAE,sPAAsP,EAAE,sRAAsR,EAAE,8WAA8W,EAAE,4EAA4E,EAAE,4IAA4I,EAAE,4HAA4H,EAAE,oGAAoG,EAAE,oIAAoI,EAAE,2EAA2E,EAAE,2FAA2F,EAAE,kEAAkE,EAAE,4HAA4H,EAAE,qOAAqO,EAAE,oMAAoM,EAAE,6NAA6N,EAAE,6NAA6N,EAAE,oMAAoM,EAAE,oNAAoN,EAAE,qOAAqO,EAAE,oLAAoL,EAAE,6PAA6P,EAAE,oNAAoN,EAAE,2EAA2E,EAAE,6BAA6B,8DAA8D,EAAE,oJAAoJ,EAAE,4JAA4J,EAAE,4IAA4I,EAAE,qKAAqK,EAAE,8VAA8V,EAAE,6OAA6O,EAAE,6SAA6S,EAAE,6PAA6P,EAAE,sUAAsU,EAAE,6OAA6O,EAAE,6NAA6N,EAAE,qRAAqR,EAAE,sVAAsV,EAAE,4LAA4L,EAAE,8MAA8M,EAAE,8RAA8R,EAAE,oNAAoN,EAAE,8SAA8S,EAAE,8QAA8Q,EAAE,sTAAsT,EAAE,6QAA6Q,EAAE,iWAAiW,EAAE,6RAA6R,EAAE,qPAAqP,EAAE,qOAAqO,EAAE,8PAA8P,EAAE,6MAA6M,EAAE,0UAA0U,EAAE,qPAAqP,EAAE,oNAAoN,EAAE,qOAAqO,EAAE,sKAAsK,EAAE,+HAA+H,EAAE,sKAAsK,EAAE,4HAA4H,EAAE,kHAAkH,EAAE,6OAA6O,EAAE,6SAA6S,EAAE,6PAA6P,EAAE,sUAAsU,EAAE,6OAA6O,EAAE,6NAA6N,EAAE,sRAAsR,EAAE,sVAAsV,EAAE,4LAA4L,EAAE,8MAA8M,EAAE,6RAA6R,EAAE,oNAAoN,EAAE,8SAA8S,EAAE,8QAA8Q,EAAE,sTAAsT,EAAE,qPAAqP,EAAE,iWAAiW,EAAE,qSAAqS,EAAE,qPAAqP,EAAE,qOAAqO,EAAE,8PAA8P,EAAE,6MAA6M,EAAE,0UAA0U,EAAE,qPAAqP,EAAE,oNAAoN,EAAE,qOAAqO,EAAE,6BAA6B,uGAAuG,EAAE,6JAA6J,EAAE,6BAA6B,uGAAuG,EAAE,4GAA4G,iEAAiE;;AAEvuoB,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,gCAAmB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAAmB,GAAG,gCAAmB;AACvD;AACA,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;;;;;;;;;;AC7eD;AACA,IAAI,IAAyD;AAC7D,2BAA2B,mBAAO,CAAC,0DAAW;AAC9C,MAAM,EAKiC;AACvC,CAAC;AACD,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C,8BAAmB;;;AAG7D,gDAAgD,aAAa;AAC7D;AACA,eAAe,8BAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB,YAAY;AACjC,yBAAyB,YAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2CAA2C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,aAAa,YAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,sCAAsC,kBAAkB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD,iCAAiC,yBAAyB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD,iCAAiC,yBAAyB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,6CAA6C;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oCAAoC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE;AACA,oBAAoB,mDAAmD;AACvE,iCAAiC,SAAS;AAC1C,6BAA6B;AAC7B;AACA,6BAA6B,YAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2FAA2F;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa;AACzC,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gGAAgG;AAC1H;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA,iBAAiB,iFAAiF;AAClG;AACA;;AAEA;;AAEA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAAmB,GAAG,gCAAmB;AACvD;AACA,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;;;;;;UCrsBD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;;;;;;;;;;;;;;AClBA,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACA,mBAAmB,SAAI,IAAI,SAAI;AAC/B,cAAc,6BAA6B,0BAA0B,cAAc,qBAAqB;AACxG,6IAA6I,cAAc;AAC3J,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC,SAAS;AAC5C,mCAAmC,WAAW,UAAU;AACxD,0CAA0C,cAAc;AACxD;AACA,8GAA8G,OAAO;AACrH,iFAAiF,iBAAiB;AAClG,yDAAyD,gBAAgB,QAAQ;AACjF,+CAA+C,gBAAgB,gBAAgB;AAC/E;AACA,kCAAkC;AAClC;AACA;AACA,UAAU,YAAY,aAAa,SAAS,UAAU;AACtD,oCAAoC,SAAS;AAC7C;AACA;AACmD;AACJ;AACJ;AACA;AACrB;AACI;AAC1B;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2DAAqB;AAC1D;AACA;AACA;AACA;AACA,qCAAqC,yDAAmB;AACxD;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAe;AACnC,iBAAiB,EAAE,yDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,IAAI;AACL;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,qCAAqC,yDAAmB;AACxD;AACA;AACA;AACA;AACA;AACA,gBAAgB,kDAAY;AAC5B;AACA;AACA;AACA,KAAK;AACL,CAAC,IAAI","sources":["webpack://SlayerAssistant/webpack/universalModuleDefinition","webpack://SlayerAssistant/./images/data/reaper_collapsed_OSL.data.png","webpack://SlayerAssistant/./images/data/reaper_collapsed_RS3.data.png","webpack://SlayerAssistant/./images/data/reaper_expanded_OSL.data.png","webpack://SlayerAssistant/./images/data/reaper_expanded_RS3.data.png","webpack://SlayerAssistant/./images/data/slayer_collapsed_OSL.data.png","webpack://SlayerAssistant/./images/data/slayer_collapsed_RS3.data.png","webpack://SlayerAssistant/./images/data/slayer_expanded_OSL.data.png","webpack://SlayerAssistant/./images/data/slayer_expanded_RS3.data.png","webpack://SlayerAssistant/./modules/SearchAlgorithm.ts","webpack://SlayerAssistant/./modules/SlayerDialogReader.ts","webpack://SlayerAssistant/./modules/UICounterReader.ts","webpack://SlayerAssistant/./modules/data/assignnments.ts","webpack://SlayerAssistant/./modules/data/creatures.ts","webpack://SlayerAssistant/./modules/data/masters.ts","webpack://SlayerAssistant/./modules/data/reapers.ts","webpack://SlayerAssistant/./modules/data/variants.ts","webpack://SlayerAssistant/./modules/dochandler.ts","webpack://SlayerAssistant/./modules/dochandler/animate.ts","webpack://SlayerAssistant/./modules/dochandler/change.ts","webpack://SlayerAssistant/./modules/dochandler/hide.ts","webpack://SlayerAssistant/./modules/dochandler/hover.ts","webpack://SlayerAssistant/./modules/dochandler/main.ts","webpack://SlayerAssistant/./modules/dochandler/open.ts","webpack://SlayerAssistant/./modules/dochandler/show.ts","webpack://SlayerAssistant/./modules/extrafuncs.ts","webpack://SlayerAssistant/./modules/logger.ts","webpack://SlayerAssistant/./modules/settings.ts","webpack://SlayerAssistant/./modules/slayer.ts","webpack://SlayerAssistant/external umd \"canvas\"","webpack://SlayerAssistant/external umd \"electron/common\"","webpack://SlayerAssistant/external umd \"sharp\"","webpack://SlayerAssistant/../node_modules/alt1/dist/base/index.js","webpack://SlayerAssistant/../node_modules/alt1/dist/dialog/index.js","webpack://SlayerAssistant/../node_modules/alt1/dist/ocr/index.js","webpack://SlayerAssistant/webpack/bootstrap","webpack://SlayerAssistant/webpack/runtime/compat get default export","webpack://SlayerAssistant/webpack/runtime/define property getters","webpack://SlayerAssistant/webpack/runtime/global","webpack://SlayerAssistant/webpack/runtime/hasOwnProperty shorthand","webpack://SlayerAssistant/webpack/runtime/make namespace object","webpack://SlayerAssistant/webpack/runtime/publicPath","webpack://SlayerAssistant/./index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory((function webpackLoadOptionalExternalModule() { try { return require(\"sharp\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"canvas\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"electron/common\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"sharp\", \"canvas\", \"electron/common\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SlayerAssistant\"] = factory((function webpackLoadOptionalExternalModule() { try { return require(\"sharp\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"canvas\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"electron/common\"); } catch(e) {} }()));\n\telse\n\t\troot[\"SlayerAssistant\"] = factory(root[\"sharp\"], root[\"canvas\"], root[\"electron/common\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE_sharp__, __WEBPACK_EXTERNAL_MODULE_canvas__, __WEBPACK_EXTERNAL_MODULE_electron_common__) => {\nreturn ","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAVXG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKrnKwAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAElUlEQVRYw92YTWgcZRjHfzsz+5HdzczuJumuJS3VSkI/AlaFgmK1PVStIJTSQy9FELy0gqIgIhYlUFHpQQ9tQZFCKWLVQ/FQ60GFUtAG0dqvNG0sRtc07WZ3Z3Zmdmd2Z8bDdiabTWJjipD4v8z7Mc/H+/m8zz/06p5dHrchdyYA0CoGvSt60coltIoBQMOt06h7JJJJACzLwK7VEMQosWiETFcGVdMBUOQkplmlVq1imhVy2Vygc+TK5aAudybu2O77oFVMnnwsyQPrN6KW4yB0MifcCiF7iND+fXu8H88OkU5349o1VENHFMM4Th0lkUSIxCiVCswX85X1/5urvV3Pb9d/55N3t2DWltHwVkEoMrcTng32JSR/tjVNDYzJsjI10Jo1p47ZJsTXoRo6GPqcsrKszDpwv32GDyEw1Bs4ngjh9JRAKAahKHgWeLWWAVaR/LLj1BkbywMwNpanI9bcotWaEfxv2XZQjkYiXL12nWhk5gwqioKqqli2Pa2/te7bmqu93Qe77nDu/BDr+w28RnNSQkIExCwISXB1cCbw3KaPIa+IpMjJaVvk50v5EHeNPP8Fdr8BZz4qeAe/tPn1WhzPq/H23g2sWrmai1eGGTx0HkVR6O8t88L2BIJpVpFlhXS6G0VRWOw49UOVc6NZUqkcHYleTnz/F43aCF99e4munpWsXf8Q48YAZ87pCLVqlVKp0NzfqrroB/fUth1YtonjuFh2nQ0DywlHQqy7z2OyWMYydAqTt3h4IIdgmpXgAmg9U4sVXekI772coSMRYuvm+xm4Z4TXD/zC4w92sPVRhZJe4YPBZ0kIfyDlsjny4zcRxfCsl8Niw9Gjx3j6kQTvv7QJt6Fx+DOH4TGZL04rPL+9j7pVoFE8wqmzIoIfpGeLOYsR3/y0mlc+dLlw4TSm/idqxcbDYdJIoZcvMjxymdcOCYzXn0HqXdHL1dFRlgpi0TCuu4J3jqq8uCPP3p1J9uIBo1wY0fn45HKW53pYt7YfSSuXAkE/rix2CIKAnExy4FOLG4Uqoijguh49mTir700gigJauYTkb8t0uptbN8tLZgU9z+G7z3czdL7AeAEycp2+zq8ZPBYP3seSf1tqmjrtNbLYIYph3hw8zM7NFhuzMFGEgycl6o5AWALTrCD19a8hP34Tx6kviVDgIyyJXBtfxVtH6jQcF0kU0E2N/r5mf1//mulnbimEgumrJxDviAZ1x50qa+VSMxSIYnjGw3gpwvdfFMNoFQMh05UJ8qeltnLtiEYiQRKQ6cog+PncUgnid0KQT2o6Av9jCH4+93+CKIZR5CRScbIYpPYdsQT79+3xipNFapaN61hEYjGW9WTnRf60EkrzJYzaSahlPVkWav/48RMBVVGcLBJ6btc2DyCb7cHQdXSjCjCD37gToaMkmqxYKym0EJl0unvB9uV0mkQyycTELQCkVCpOuWwyPHz5H1mqVsWtDvg3rWrogbPth/vfyMw1qPnoUm8TUul0N6lUHKlR9zg7NDQjiPukTfsXQFV1bKtBWStNk2knlRYiczf2p2LddbY8sYm/ATWM+pwqaFlsAAAAAElFTkSuQmCC\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAXKm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQRroAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAFsUlEQVRYw9WYXYglRxXHf11d3dX39p3vnZ3sRtZ8sZF86K4JRo2oD+JDFGEhYlDfonnOQ4jowz7qg/omq0YQCYgo+CCDUUEkGgzCIOaDXU1wY3CdZDc7M3vvnXvvVHV9tA99u2auIaJvMweaunWr6lT/65w+dc4/+cwXHqt3rl9FpCkAaSppxXvHQQnek+UKAFuZ+Ptgv229d9R1QMocAOcq6lDPzDnYAjO6236rx1nHE48scuaeBxj0uyDmeEcJuyTVBvLvr1ziX69fRgiBSFOctYTgWVhawWiNsxUyywnBI0RzAJXRAMgsI1cKPZngnCVXBUKkOFsBUHS7OLt/QJXRcZ/2sBo9eRyTWT6zJ0CnWzLc2eJ95x9hPBxAssR/lURRJ8sIgFwVhBDIlSJXBVJmDG5sIzMZN2tfztmKbq8XwU5GI5yzFJ0ygm5FTyYNiOlLdns9RJoiRPOEEAghxINyzlIZjcxyVFEQfLPH7qAPwHhwFae3IQzAX2+esAt11bTxvwHUe0gpGzcUQuCsQxVFfIzWpKmMfQDnPd5aTt12mvFoNDMmM4kqStI0wU2t4q0FQBUFznvyokOCIE2TGX0A8wuLhANrllePY7RGFQWpELz48gb33DmmdluNgUQO6RqIHoQR+GvUoTFEUu+Q3HX/R+qrm/8keE85N8/m5b8mHGL54w969YWfV/zhJUUnM3zj8fu45dTtXHzlb5y/cAnrEj5+xvLYubJxSyFSRJpGCxxmeeb5CesbS+y6OW74k/zi2Tdw+lXWf3eJ0L2VvWSF9Y0lfv/nYQMOwE1d4bDLpz79MGk9oQ41lTacvfckWZ5w9201zlbYyqDSwAfPnkRIKamMJlfFkQC3spTzw/M3cf975vnyZ+/i3hOv8tVvv8DH3t/h3IdrPvTeE/zsu5+jFFeQzrlptPRHAtzTT/+Yhx4s+ebjHyW4Id/7qefZl3LueG6ZR8+dxpot3M6PeOZPgnhjC5FitD704J767btZf/4qT3z+OW551wqD3Yr5Mmd7vMiof5F/XNnhWz9xaHUfydkHP1Ffef0yldEcW7uJ1y7+5VBHy8XjN9eJENR2wtcfHXL37b04dvHyiK98v0NeLnPq1juQxmhkJoHiSFiuTRGtTfnaUzm7ozGJENR1YHmppFN2EXmGMbpxS2cdldFH4ipor6xQjXjhl19i4+Ut3tyC5XnL6blf89CTGmebHFUqVcRoeRTAAewO+qSp4snzF/jiJy0PrMG1HfjOrxSORZzRKFU0lgvBx/zx0FtOpAjhSWXG+sYiv3lRIURCZSpWjq8RwnaM/M03J7OmIvCH/zpovasymk63SeC99yRCEKZuKwFjNEKpImbq/ghkKUZr9N64qSKm3iazPCbpMZVUBcIYjRDpkQkozlYUnTLWlvvuKlBFMa0L08ZyHFFpC9pcqWnNGN7+fZa9eSqjmVtYPDL33EEw7TUmswyjGxyV0ZS9+f1KfG8yJs2yQw9KZvmUIchmKv9OtyTNMvYm41gEyPFouM9x6D3uPPOB2k4DS9Ep0Xvjt7XZ9BDSKfnjXYW1lt7cPKPdYVzrXUUq8zhedMqZ+W2/1WmtjW2r4+D8LMtIZY7eG7N8bC3qb9cP+jcilvFo2Fzirf9WxnDtjU1CCAghprxKwbDfn3Im/Th33z08wXuKbpe33tyk6JQ4WxFCoNvrURkTSaNWX5s09He2Yx15sDLJlaIyhspsRivkSjEaDiLgnetvUXS7TEajmIAc3CtGS+fsTHrTslAHy6CG0PGRqZKZJARPZTQhhBmWq33Z0XAw4zrdXg9nK/LpgQbvp4yZiGE9eB+JpRZIZRouR4gm9WrnOuuYW1gEYHBjez/YONvklsdWV/8/n5cS5xwtseSc+5/XvJN4V9Et55lMRjO86X/qWFldwznHwtIKShWRVx3tDjh+4uaZ+cdWV/k3rAQo1Oy03j4AAAAASUVORK5CYII=\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAa4G5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ePXqQAAAYVub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqIw0NAAANGG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+dZ7WgAAAAZub1BFAAAAAAAA7Gu72AAAAAlub1BFAAAAAAAAAAAAoYpy1QAAAAdub1BFAAAAAAAAAFrm3tAAAAh/SURBVHja7ZxvbBt3Gcc/vnNsJ3Z8sZM0aedMZR0J7VqgA2looMGKNHXrNGma9mIgjaIheNEiDRWpmvivakyA9gJerEUgNFQNhIAXE0JjvABENQGtEGXr2qysILUN6R8n9p3vj3323fHCvYu9JKV/k3P3fKQo9tm/ex4/9/j8u+f33Dfx5V1PBFwiP5gFwKhZlCZKGNUKRs0CoOU3aTUDsrkcAI2GhVuvo6hpMukUxeEiumECoOVz2LZD3XGw7RrjY+PRPk++dSJ6nh/M/t/tK+nDzbQlcb28LcvxeOSTRT64+R706gAogyyLXyPhHiHx7a/vCv52+AiFwgi+W0e3TFS1D89romVzKKkMlUqZK+VKx4bvW277SvqwErau9r3vtrhWqhY/+c427PoaWsF6SKSWdyRwwT1OMvxGGYYefeh8XltI5Hpj2X0slfDhPnTLBMtcdmw+ry35YcLtK+nDStiSuF7eVrPhY+nn8AIV+goLLyYykEhD0ICg3pHADom9T38mmJ4+AcDp0zPRa/2Z9hTCqVvRtobrRo/TqRQN1yWdWvwN0TQNXdcXvb7c+5fbvpI+rJQtievSthIJlb07M2ye2kSQKLbzVkmBOgZKDnwTvPMEfntsIpgnqeVzXT81/zg+k+C6mWH1mbkFbd3acX3yK/Daj8rBC792ef3tAYKgzrd2b2X97Rt4861p9u1/A03TmCpV+fyjWRTbdsjnNQqFETRNQxBWk1f/6vD6v9cyNDROf7bEy3/6L636SX7zh+MMj97Ops0fYtbawmv/NFHqjkOlUm7PTXRdoiesKtsfeox6w8TzfBpuk61b1tGXSnDXHQFz81Ualkl57iIf3jKOYtu1aBLeORcRhNVguJDiu18q0p9N8MD9d7Jl7Umeef4oH7+7nwc+qlExa3x/3yNklTMkx8fGmZm9gKr2LTnhFoSV5ODBl3jw3izfe/o+/JbBgV94TJ/O86tDGk89OkmzUaY1/yKvHlZRwuLxUrVBQVhpfv/3Dez5gc+xY4ewzbPoNZcAjzlrCLP6JtMnT7B3v8JscwfJ0kSJf506JVETYkEm3YfvT/DcQZ0vPjbD7sdz7CYATnHspMmPX1nHuvFR7to0RdKoVqKBYU1OEFYTRVHI53I8//MG58oOqqrg+wGjxQE2vCeLqioY1QrJcNpQKIxw8UJVIifEgiDw+OMvn+TIG2Vmy1DMN5kc/B37XhoA2n0iybDaYBh61yqIIKwmqtrH1/Yd4PH7G9wzBufn4YVXkjQ9hb4k2HaN5OTURmZmL+B5TSmVCbGhL6ny9ux6vvlik5bnk1QVTNtgarL9+uTUxu45r5TKhHidfRUG+tPRc89feGxUK+1Smar2AciZV4g1YX6qah9GzUIpDhej3ks58wpxJp1KRU1kxeEiStjPK4sUQi8Q9RQbJoqEQ+hVlLCfVxB650KuDy2fW+jnBaSfV4g1YX7m8xq27Sz08wLSzyvEmjA/K5UydcdZ6OftLEUIQhzpzE/brqGEmgJhKUIQ4kpnfo6PjXcvUghCr1ywGTULpTRRkhqv0FN4XpPSRAnFqFbQsm3pHennFeJMmJ9aNrfQ26CkMhQKIxIdIfYUCiMoqUx72pAfzEalMunnFeJMmJ+VSpn8YHbhBkzfrUt0hNgT5ml0wQaXxNMEIeaEeRpdsIXlB0GIO2GeRjdgdgrtfeFTOwIJkRBHDh89GvWeGzVrsW7DD3/2W4mSEEu2broNWKjzJsM6r26ZYR0tIWES4kh/JhtAR503mUpjXlKtllKZEGfC/DTrDZKpNMnOfl5dN4mHgLEgLEbTtGgxraufV/R5hbij6zq+W1/czyv6vELcabhuVOft6ueVW9+FuBPe+g4d/bxh+UEQ4k6Yp13Lw4LQS3QtD4P08wrxpjM/o35eQPp5hZ4gzFOjZi1UG0SfV4g7Tt3CMPSFasPk1MZoIiylMiHONFw3umCbnNrYPeeVUpkQZzrzU/R5hZ4784Lo8wo9euYVfV6hZxF9XuGWQPR5hZ5D9HmFnkP0eYWeRfR5hZ5F9HmFnkX0eYVb4oJN9HmFnkT0eYWeQ/R5hZ5G9HmFnkT0eYWeRvR5hZ5F9HmFnuWy+rz33j0ZACRV9aY5oCSW2Lfqt/977UY3P/BWNCihT9dr1/N9qoZFparz3Ofex54DJ1i7poiW68cPgmuO643y73K0vIV9x/H41yyjS593UZ03qao31fHlj7qy6om7bGCvkCAIcOou5y7qfHXnBO9f4/Dpj5U4d7GK02gSBMGq+ncl9MLxj22dd6UT90bSbHqUKzU+sjnLwx9o4lbLPDzVxx2jaeaqNVqeL7/713H8F9V546DP6wde9NerXx4/CDDtOs2mw7OfHcVzdPyWS70yx57tt2FbNk7dxQ+C2H65V+WMexXH/536vFE/b6EwsmL9vJ1Oxilhr8uXIMBttfjGU3cyWugnOThKZmQdmcIwY8UBdu14L82mB9eQvDfEv5ieXa/mM4X6vGE/bzLs59WyOXRdZzCbf1dOD67Xn0QiQbY/zbM/Pcsz+xt4HVMEVVXIDaQZKQySSCRuiXitRrxDfV7dMhkpaiShveRWqZTpz2TZ/uA25ufmqTdcfK9BKpNhzegY4Y2aWj6HbTvUHQfbrjE+No5RsyhNlDCqFcJFj+Jw8arHtPwma0bHxL7YX9L+oT//Bd0yo1aGxM4nHgoAxsZGsUwT03IAoiXjzvraUt1n4fbwok9JZaKx1zImdEzsi/13jlm3dpxsLsf58xfbc/ShoQGqVZvp6RPLFoU9r9nlRKeBsO6mW2bkTGdJ42rHLBc0sS/2z5w9E+1raGiAZKsZcPjIEaC7U73huqRTqUX/23MPE7fRompUusaEpYzwqvBaxoh9sX85++1bgf7Dtk/cx/8A/EcyrqMdMKAAAAAASUVORK5CYII=\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAe825vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz2Q1aAAABhW5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKojDQ0AAA0Ybm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD51ntaAAAABm5vUEUAAAAAAADsa7vYAAAACW5vUEUAAAAAAAAAAAChinLVAAAAB25vUEUAAAAAAAAAWube0AAAD3VJREFUeNrtXWuobddV/tZ8rLX24+xzzj335t7cpOmNaaJN0+ZVaDWlthCQVi0EFdGCSpUo4o/+0BZ/GPwjAR8IovUFPgoiKiI1UBVsNRSLcCmWliS2GtMm5nlfZ5+z99prPpc/5hpzz71z06Zau/e9zA8u+9y11nyNMdZcY4455hjFBz74cHf5wktgnAMAOBcgOGeRwjsHWVYAAKNV/Dv9P/06Z9F1HkKUAABrNTrfrTyT/gJYqZv+n9ZD/eFcwDkL7xwY5/H/1HejFRjnK/fT8VSDAdRiEcdEz6T9IXqk46Y20v6l46W+Ufn1OtO6v1Z767RepzH1Ix0zje9a5V8zO8ZHPniAe+56B6aHQ4Dt4DXhj1Ho8xD/+aUn8d9feRqMMTDOYY2B9w67+wdQbQtrNIQs4b0DY4HAWrUAACElyqpC2zSw1qCsajDGYY0GANTDIaxZElCrNrZDxAz1lPGekOVKmwAwGI4wPz4CgBUmW2MgpIR3DkKWyXUNxjnKqoJWKvbJe4+yquNz7WIOxni8RmNc7//6c1R/2v+qrnE8PVzpD9UjZAkhBbRSK/1mjEdapvQnujaz2VXpxThfKZvyS6v2muQfug533/EDmB9NgWIfXxNFha44AQYAZVX3jK1QVjWEkJheuQQhxQoTtArEGI7HkRjNbAZrDerBKBIlCkfTROICwHA8joRnjMN7D+99JKS1Blq1URi8C20cTw8jkegalWGM90zXPdEEvPewxqwIrpAlhuNxL8ShP2VV92N34bpz8N71wlbGvgshsbO7t1J22YdAn0UzD3X1ghuEyCeMsrDGREElIWOMrdCfMdYLpgq8kGUsFwTCw7vQX+p/yq9rlX/OGsynL8G2lwA/BdyF8M8fA50Ov/HaFOgWKN72zvd0Lzz31cjgqg6zS1XXUO1yMHTdOgdnDHb3DzCfzWCNivea+QxVPQLnBWz/Vrqe8FVdx2sFGDgvVuoDACkl/FoZ6gP9XdU1nOvAefGqe0JWsEatMID6lj7rXIcOHoLzV9XBpYztr4NLGcsIWcUxUP1cyjhmapfupf1Ix5XWuV4mpVtap3UOop/B1vufjvta4l9zfIxf/WmLu779TnTFidAOKwF+GmBjwM8A9zI6H17EoruM4s63v6t76fln4Z3DaGeC559+qkBGxobwL3847j721xqPf6HEUGo8+uH7ce6W2/DEl/4dj3zsSRhb4D33GDz80CioDTR1p29+RsYm8MnPNnjs/D5anMQri5P4xD+/ANt+GY99+kn44a1YFAd47Pw+Hv/cURBeUp4zMjaN7/2+HwTvGjhnYbXGvW89C1kWeMu3dbBGw2iFinu8896zYEIIaNWurMIzMjaFg/0Sf/TIGdx3+wg/8yN34603fhm/+Bufx3ffN8BD39XhO992I/7yd38YI/YchLU2rrgzMjaNj3/8z/D+B0b4tQ+/G94e4ff+wuHxL1Z402dO4CcfugNGXYS9/Cf45L8yRIs2Y3xldZqRsQn8wT++EX/72RfxCz/6GZy7+QDTY41RLXBpvofZ4RN45rnL+PU/t2ir+1Hc+8CD3XNfeRpatTh5+gz+64l/y9aGjI3hzLnbO6MNbDvFoz81w1tuG8d7Tzw9w0d/f4BydAK33PomCKVaCCkA1Hnmzdg4rLEoigIoJB754yEuX56hYAUKFNjfH2EwGoKVEkq1QW2wxkKrNpvKMrYC3juUJcfn/uYncP6LF/HiReDExOCOnb/H+z/SwprgQyGqqo7Whiy8GVshuFUFrYCf/6XfwY99j8U7TgMvXwZ+++8qWOzBqhZVVYeZl/b2MzI2DXJIKqsan3riJvzD5zXq4QhtM8f+wSl4f2npX6JUCyFkcG5x2VyWsVm0TRNNt0ZrjCd7WMznkGUNj+CVJkTQeVlV1dFTyOVdtoyNqw0+eAb2E6lqg/edVi2cMUtXhqoOMy/5hmadN2PzakMNayzq4RBlVaNdzHvXUImqrnu/YR5m3kyujG1CVdewRqNtGggpUA9GKKvqqs+y0XgCrVrs7O5lO2/GxrFo5sGB3hrMjqb9IQOLsqqg2iCnWrUYjSfLkxSLZh6dqTMyNoVwQsP1M27dH0XSmB1NwaWMJ1aCtaFtYqHxeJKpl7FxpO65Wql4TGk8nsQjRKptwswbzn05zGezTLmMjYLO9lV1Hc/KkUFhPpv1ZwyDPxmz1vanVPmrzn9lZGzC2kBqLB0Y3dnd6zfSVHJo1AZndNHrutlUlrF5lUFH1SBoBSWmVy6hHoyifAopIYQIzuhLPSJbGzI2CzpKH+Jk8GjXTeWTMR5m3lAgbwtnbI/aYI1Gu5jHmXbv5KkVGY2+DUKIZIquMvUyNr5gA4DxZBfH00OUVY3Z9LAP5rKUTyFEWLDp3iE9DaKRkbEpjHYmMVoP+Tl478F50YfNamGtDf68QkhYY7POm7EVasP8+KgPJeXQzGY4efoMVNv2sdcshJCJYw4Puxp5hy1j06jqGqOdSVQdvHdo5rO4A+x9iCy5dInsV3PZJTJj0zieHkYNoG0a7O4foG0a+CQmGmOJSyT5S+7uH2TqZWxcbSCLAuMci2Ye7+3uH8QdOKXaoPPSFly7mOO9P/TjXSZhxjbiq09+IcpqVdUQztkY61W1Lf7pr/40UyljK3HTbW+OdmDnLB3A9LBGk1E428sythUdRbgHQF5l2bch49qwRKTyygBAViGEvXNZ3c3YXpB8krwyzgVUs4g7GBkZ2wrOC3jvoZoFOBdB511Po5SRsa1IsxEJpdq4d5y3hzO2GSGGQ1isKdUuvcpE3hrOuAZAciqECDpvmi8sI2PbEdZnvc6b81FkXDs6bzhhEWbfmK3RZTtvxtaDUukKWQY7787uHoTIOm/GNaDz9ql0AYDNZ0cxxE5GxvYv2Eosmjnms6PezstC9susNmRsM9bzSLOqD+Sb+k1mZGwrFs08rM+iM3ofyDdHRs/YZpB8eueW8XmFLMPR4rxNnLHN+i7n/RH4cqk2WKMhZJm9yjK2Gs51IXav0aunhwHkQHsZ26029PK5cnqYopRka0PGtWBt0H0eNiZkGU1l2assY5uh2jbG7RWyBKPDl4tmnmfejK2feSmsvzU66LwAVmKiZmRsK2K4U9WC7R+cioH2MjK2HRRob//gFNiVSxdCsramyZsUGdttbXAupne9cunCahLBvEmRsdWz7pp8RlMZ4xyyzMGlM7YXsqzAOF+ayoDlSYrZ0TRTKGNrQfK5TCLYn6LI1oaMa8XaQFEiGRAyDmZ/3oxtB8koZcgUQogYIdI5mymUsbVo5rM+iXa9zMNmjQYATPb2cOLGWzprDISUsMZE/YI8z9Z/vXfwLgQCTp+P5o3+OfKfEFJGtzZql/6uh0M0SQpZxhiELNEu5qgHo5U2KaUnRVDRqo3n8MjRiIKp0I6M9x6MsXgNQKyL6ibQuOrhELOjaWzfe4/heAytVCxH9WnVQpYl9KIB93P85s/eiZ/7rafAqhFEWaGqa2iloFUb2y+rKtZP9CI6lFWYaebHR2CcR9UupTl9OYlf67/XE/+GozEuX3gl9MtaOknhk86aUCHjYIzFDQzqIOWvoLCoQQfxUZEOKebDoNYdfpYC42NdqcDMjqbw3i0V8sQ0EjLALNMOhFOkbOmLLGSsyzsXLSgxoiDny+eTnF6kQxGDKA9zOFHtYc3q16isasyOpnFsADAcj0OM47KCbhdomxl+5eFzuOeGFh967xugF3NYrdD2p1VIULVqwbmIviVEN2tsPGQ4vXIJo51J8qK4yNSr8et65t9yYvGvtjbQmzXamazMRFqpGGZd9ycvyqqODC+TvBZEiHR2IYcfIsZwPI6EJ4aQgxC9ofRMyuyyP7JEQkcDCgzxcRaguuIJkSQlqPcutqFV2+e3NXGmCJ+lqiemhFYt6sGoF4Ky17XkCiO1UglTFR68f4Lvv9tAH17EB75D4q6bB/DWAEWxMtsLIaHaNvqWCFlitDOBkAKqbdEu5vEZEpYwq5ZRUNf5db3z76rWhlTqqbPpW1RWFawxGE92ceLUDcknQy7zuEkeiVJWNbjk8S0N12Vfj0U9HEJIiXo4jLMKDS4QWUWhCp5EDGVVxQEJKWM5EryUwNQPGjQxn8rUw2FM0lwmtm6aDalfKSiRM9UrpIhlvQuJnUfC4NEP3QC3mMJbjfbKJXz0fTdDdC28dfDW9kIn4gxEzCRBodmevKfSr6LoM+LQ53SdX9cz/0i4ydrAz91x1y+//MKzYJyjKBhUu0DX+f7tNTC615GsgfcesiwxvXIZXdehYAXKqkJRhM9T0W/YWaNhrYHVvQ5VAM5aVINBZAx9QroudHgwCrNb0X/yVLsIyeQWDbx36LoOWikMRiMYreGcQ8EKcCFhtMZgNIL3HgUr4KyNguichSyr2F6qIoTPUgh3xYVAUTBQmgNrDBjn4ELAGg1ZVuFva9B1HoxztIsGzllwLuC7DvAOjz78Rtx3+wCFkNB+Am2G2N0b4/TJCc4/s4C1pq8z0PPUmbM4nh6iGtT9LN6i60IOMto0Ivp0XRfLCSlRFCz2h/jlnLtu+ceFgNFhzXD2DbeiuPPt7+peePYZCFlisreHV158fkX/oAUJvXVaqfj2pAsfimRCbxC9IeniAQAG4xHmR0cYT3ZDuaaJn4ygO1JGThkXTEQw+pSliwh6260xcSG1fM5EvYqu0SIhXQikC42Tp8/glRefj6rC+gKPXgCqO+rTBYPWLaxqYbRC13kURYGu6yCEBOMCKArsnTydqBkuqiXpl+Fq7RAdaHYl+tJCh/hFqsb1yL+Tp8/g6PAQ1micvaUX3ldefL7/xFTY3duH6TtaD0ZxpZj+yl6J5qKPqG41jDEY70wwOz6KZZ3V4KKM90n3Wf8/1WmMib+prkTPSynBxXL1SvWn5eNWYv9s2pazOt5f7/t6X9bLUpvpM1TPOo3SRQnRhOpM76VlqG/rNKB2Xosn6/SiPl+P/Lt88eVo5bnhxptQ3PvAg90z//HUitnkW2FSSt+4dWWeZohvpkmJZpB0Zktn1nS1nc5ar9eElM5YmzQBrv9ej/yzRuPW298cFmypCeNbYlIiover3rBy1pExlDT5m2FSCouPKlmdi2gOKqsa9XAYFxCpGShdeVN/aSxLm6eI92nF/PVMSLSg+f8yAV7P/IsThzVQqkXx7vc91F28cOF173IIIULG7T4otbX2dZd5LTirMRxN0DQzcC5es460vaqq447g7Hi68rkGEBdS3yi+Xl//r2W/Ufr9b8dxvfPv5KlT+B8FiFlLoxQJ6gAAAABJRU5ErkJggg==\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAXWm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALW4o8EAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAFNklEQVRYw92YaWxUVRTHf/OWWTqvM53ptNOBVpaCLAo0ERqQILhEwEACiYnBxIiJ3wgJGhPBKAlI+KhGTEAxhEQxBgyRoAgRiQGRpUqlu0AFStuhU2Z5s79Z+vxQZugaKmAy8P/y3jvvnXvOefeee+75G95Zt0bnNmzFVgDCkRiVVZWEQ0HCkRgAmb40mbSOVVEA0LQYqWQSQTRhNhlxljpRw1EA7DaFeDxBMpEgHo9Q4a7Ij3np79b8s63Yelf5UB+0ZBaDKBGJxglHVDJaCoMg033zFlbXBHbu+JgPt24j/s8pDNs3r9PPna/D4XDRl0qixqKIokw2m8ZuVRCMZoLBW4wVY9XNfTeafKRxNC2NPxil0+tHNlupnjABk6WYxpYG5tUuYPsnOzn63ddcvFhPV90xpNzfDofVvDGbzX4n0KQ2aiAj/ZDcGGosCrHoqLo2m33EwHPygT4ICY1EMsX1zl6cpR72ffEWU8ZPxVxWzrnG65w9W8ezy1Zw+pej1J35Df3aCZp6+jC8u+F1va2tFYCOjq68EYu5f4kmkrG8TEul8vcmoxEtlcJkNA5z0G63o6rqsPejfT+aPOdDNB4hqCaYNH0uX21ZiS/pos+gIFiK0JH4fPceMqIZxSLS097A4RN/8PySWiS7TRm0ROpbugzcN7p40LAVK/qO91dz02+hs9eLL55ikseBWTbx2urn+PbgT5T4G6iZOZ2sfxxZSUSKxxPYbPb+paRG/xfHHgRWL1vM+ZMX2Hu8mWgoxIGt6/CKBjZs20VbUyNvrFqEUL2UL4+dprxPoPFiK0IykSAYvNW/vlWVQoXHU05LRy+vrnyRRXOfoLvIxfotu2mq/5P5s6s519iOzaLw9DSZqGxnzoyJCPF4JL8BDMypQoOvN0A4koJwF97OaxRJEgFfd38SdHrp9oUoLy3hmyNt1Hpg9iQnUoW7gi6vD1GUR0zqQsHVbj+GTAyj1ku7P8OVlhbefGUFlzv9VI1zsvSF5eza9SmlLgWpahYNfzUg5ArkSDWnkNDc3MINX4RzV25iFGBxzWwqyxWWL5yKQ0ixcdNGjLrORx+sp0RP0VzfhFBZVcnDAKtZwl1ShNcX4dq166x9bxsRNcrPh37g/JlTvL12Ga4KDwcPH0HMenl5dTVSOBQcVlcKES5HMVdvdPPkzCm0Xu7gQksbF5ovoWNgxZIadnx2kJpF81k4y0Nx1UQeaz99Z1k6HK6CnjmzScbjstF2pQPJaMLuLEPLZFEjMQ4cOc3kp+awakElPREre/d8z6Z97Ui53TIcVgedRgoNBoMBi9lEpdtJQkuRTmeZ6ClFEAwktDTHfv2dH4+fpFgpwm63MrdmKtLj02bQ5fWRzaYLuhT0BwiyLCLLFnRdB/oPUzZFx2lX8If8VE8ejyyJ1NbOG5xzhVwKRprJgfcmo0Sx1YLZJAMQUYP9OSeK8rCD8cOInP+iKBOOxBCcpc58//QwzdxIMBmN+SbAWepEyPVzhV7Ex4p8PxmOIvAIQ8j1c48SRFHGblOQAv5AvrW3mK1s37xOD/gDJLUUfVkNo9lMeZl7TOTPQDJnrITRUAKovMzNvdrfv/9QnqoI+AMY1q55SQdwu8uIRaNEYwmAYfzG3Qgdu7WfFRtICt2LTu6kdC/2bQ4HVkWhp6cXAKmkpIhQKE6ORxlNeeDAAx3I7bRqLJp3dmhy/xed0YIay1jqbULK4XBRUlKElEnrnK+rG1bEc6TN0GuOjkhpGULh4CCdoaTSvejcj/07te4qzy15hn8B0nEpIgoaSy8AAAAASUVORK5CYII=\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAYyG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgO3bMAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAGeklEQVRYw9WYXWwcVxXHf3PnzsfOfnhjr22SNMjOR1OC6gRIS2gJX6ooRS7qAwIET0gRL6gSj+UBoZaKB4RQhVQRRKmQqBACVPEApUiABDSQNECCE7upiI1J7Nhexx+7O7s7H3dmeJid8W4lJHhbjrS6c/fee2bOOX/dc85f+8TnvpBsb64jdB0AXZdkEkWKfomjCMO0AAgDP3/un2djFCmSJEZKEwClApI4GdjTPwIDurN5v54oUsRxTBxFdNsuge+hCQ2h6WzV15iaPsx3n3+Orz3zLJ2lPyJvvrnAyvIiQgiErqPCkDiOGNk3hu95qDBAGiZxHCFE6oDA9wCQhoFpWXidDkqFmJaNEDoqDACwHQcV7jko8L38PZmzUj1mviYNc+CdAAWnSLvV7BkWEnQ7jI5VuXd6CrtQ4drCHO898xBff+47vPqzl7ALBludEAlgWjaB72E7Tv5xjZ0tSpWR1OthgND1/AOcUgm32UAIm47rEscRdqGI121jF4q5MV6nM+AYp1Qi8P3cSSoM873SMAh8jziOMS0by7Zpt5pIw6TV2IUkQQU+J45N842vnuPowWPY4xNcuvYvLl68zIc/NsuF377K5T+/RrL8Oy7fCpBSpjAUQqBChWXb+c/3PHRd5nMAFUVEYcjbD99L23UH1qQhsewiuq6helGJegZYto2KIky7gIZA17UBfQCVkSpx35nR8Ql8z8MwTUKvw8mZ+3np6Vnq3ghrOx2EV2eyWmb99jI/fPEFSgWdsLnGy39pcXD6KNqJ0+9P1ldvEUcRxXKF1cU3NIZQTKuQXH7lm3jNAiub29Q7AdP792EbFgiNH7/8K8aCOaYO3Mcvfn+F1+/KFJYZTLIIDKN85vGP8Pof/sYPfjOPu7vLT5/5Imu6xpeePc+N69f4/BNnEUce5YVfX2Ai0fEbdxHZ4X78D6McODDBwq1NPvv4Rzl7+p3ccWo8+fT3uH7lr5yZOcKla4tUCiUeOm7gGiOcPX0cIaUk8D1Myx5q4zY2t2m2AmiusrayjCMl2/U7AKyurHGnvsvEWJUfvXKDB/fDzPQoUimFadn5tTussrSyhR63Mf1NFrcUNxcWOPfpWf6xssWhA6M8+shjnD//bcZqJeSh+5m7OrcHSyF0fM8bWuPmFt7gdr3FpZvrmAI+eGqGeyZKPPbwMfaJgKe+/BRmkvCtrzxJNQmYv3Id7V0PP5LcXl4k8D1qk29jaf7KcN6WTil54MRhlv65TJQITr7jCB//wLu5eulPuN0On/rkLBcX6rSbG9xXS6i762kq2L67kee4YU0FlbHJJA4DzsxMcePmbbp+FxJBgsbsh06x9PdFTp09wwNHTcqHpogXL6SwVKHKS6phFadUBl3y2tUlNMOiXB2nG0bsNFx+8ssLHH7PSZ543z1stIq8+P2fc+75+RSWi2/OY1o2lWp1aGFZOzidZAV46PsITUMTAmkYtFtNiGMKtkEQKGJNMH3sRBq5OI7yYndYJa07I6Q0MUwLyykSJwlCN6jWJrCKJcq1/chCEWmY2E4R6fseUhppRxANdzpQYUh5pJgbaxeKaWC6AaCh6TIt1EWE73sIy7IRuo4Qel6wDqOk7VVazHvdNtIwcrRJw8yLdCF0hK5jWTbC9z2ESNuZYa4tAz/tLVUYYBeKeT28l6cFlm332jI9jRz/J5JCMO6DaNrQmlbavfev5QYXSxUC36M8Uh3qCiVrqnPKo2dMlsakYeB7qR2B71EsVdLImZZNt9NGN4zhvy0NE2nIvHPPpOAU0Q2DbqedO0G23eaeAq/L8VMPJmHvYumnDvpHo+cEvUf+RCogDENK5Qpuq5mfjVSALs18PaMg3jrPdIZhmI+Zjv79hmGgSxOv22a0Npnrz843dndyW9puE2lZdo7fwPfZuLNKHMcIIXI+o7m72+NBdvO9e/CIiKMI23Gor61iF4qoMCCO4wHOJPsv42tMy2Z3eyvvI/s7E9OyCHyfwF/No2BaFm6zkRu8vVnHdhw6rptzLv3vym9LpfZSQJoWxAD7lHUNGSxSjEviOMpJnX6WK/tYt9kYgI5TKqHCALPn0DiKeoyZyK/1OIrwOp2ByAV+yuUIoadcTG+vChXlkSoAjZ2tvctGhfi+h6yNj/9v+UZKlFJkxJJS6r8+858kUgFOsUKn4w7wpm/VMTY+iVKKkX1jWJad86puq8HE/oOD5dr4OP8GnWaF+iWIoRwAAAAASUVORK5CYII=\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAafG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejEs8AAABhW5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKojDQ0AAA0Ybm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD51ntaAAAABm5vUEUAAAAAAADsa7vYAAAACW5vUEUAAAAAAAAAAAChinLVAAAAB25vUEUAAAAAAAAAWube0AAACUVJREFUeNrtnX2MHHUZxz87O/t2u7dzu/fe7im0tKUIpWptKoggGilSEpqYGDDGEkn8oyFBMREMakDA/9SICUUMwSjEBEM0CEJEYsAKbZVCX0/oQWnveu3dbXdn9n12Z8c/tjO3x93VXgt7s+X5JJe7m5vfPL995tnZZ57fM9/zfW/rzTaniHdGATByBVJDKYxsBiNXAKBWr1Kr2kRjMQAqlQJmuYziDxEOBUl2J9GNPABaPEaxWKJcKlEs5hjoH3CP+dZ/D7q/xzuj/3d7K+fwYdoSv56ZrXiXxvETaXL5IorPR6VSoVIxOfTOEboGV/DwQz/nJ/fdT/GdV/A9+KOt9o6du0gkeqibZfRCHr8/gGVV0aIxlGCYTGaKM+VMxzr7zbe9lXNoha2F7vtR9GulUiWdyTM6niYYibLsYx8n3BFn7/49rFu/gQd/8TDP//H3vPnmbsZ2vYDqvKMMQ3dfdDyuTQdyuTKvsbkC3jmGXshDIT/v2Hhcm/PFONtbOYdW2BK/zm+rq6ubvGEwfHSMZPcSnvj1d7ho6QrCvX3s2Pser722iy9s3MT2vz/Prlf/iX34JfadqOP7/h3ftIeHDwJw5MiYe8BIuJFClMqF6XeGabo/h4JBKqZJKBicNRlN09B1fdbf59t/vu2tnEOrbIlfZ9sqlSsUSjUuvHgdv7v3RibKPdR9MZRIBzYqjzz6GDV/mFjEz4mRPTzz0r/54jXrUbV4bMZHze4DYz7OmTEWn7Hz0Nb569d4Z8x+6J7NHE9HGJ0cZ6JocuFggnAgxDc2X8sfnv4rXek9rL3kYqz0EizVj1oslojHtcbHgZ73iIOEjxqbN17Nzpdf5/EX95PPZnnqvq2M+33ccf82hvft5dabrkJZfh2/eWE7fXWFvW8eRCmXSmQyU43cRNfFi8KiMDjYx4Ejk9xy45e5at0nONbRw+33Psq+3f9hw5rl7Ng7QjwS44pVAfIBjctXX4BSLObcJLw5FxGEVjIxeRIjZ4IxxvjoYTpUlZMTxxqJyug4xyay9HV38eRzw6wfhDUXJlEH+gcYG5/A7w/MmXALQit491gaX61AsDLJSLrGoQMHuO1rm3h7NM3QkiTXfel6tm37Jd09MdShy9jzxh4Up3g8V21QEFrF/v0HODqRY8eh4wQVuHrtGlJ9Ma6/cgUJxeSuu+8iaNv87Ie302Wb7N+9DyU1lBLPCYtONKzS39XB+ESOw4ffY8sP7ien5/nbn//Czldf4btbNtIzMMjTzzyH3xrnq5uXoxrZjHsApyYnCK2mJ9HJu0ePceklF3Hw7SO8fmCY1/e/hY2PTdes5aFfPc3aqzZw5WWDdA5dwMdGtk+nDYlEj3hQWDTCoQCDPXGGDx1BDYbQkr1UahZ6rsBTz21n2acv56bPpjiRi/L4Y3/i7idGUJ1qg2HoM1ZBBKGV+Hw+IuEQqf4kpYpJtWpxwWA3iuKjVKnywj/+xbMvvkxnrANNi7Ju7QrUlatWMzY+gWVVpVQmLHIAQyDgJxCIYNs20FjsjcdsklqMdDbN8mVLCah+1q//zMycV0plgpeuxM0/h4IqndEI4VAAgJyeaeS8fn9jg1x5BS/jxKffH8DIFVCS3Um391KuvIKXCQWDbhNZsjuJ4vTzyiKF0A64PcVGHkXcIbQritPPKwjtgt8fQIvHUJr7eTVNE88InsWJz3hco1gsTffzAtLPK3gaJz4zmSnKpdJ0P29zKUIQWk3NsqhZ1mn3aY7PYjGH4mgKOKUIQVgsVL//tH9vjs+B/oGZixSC4NXAff8Nm5ErNPp5pcYrtBOWVSU1lEIxshm0aEN6R/p5BS/jxKcWjWFkT/U2KMGw9PMKbUEi0YMSDDfShnhn1C2VST+v4GWc+Mxkpoh3RqefpKibZfGO4HmcOHVv2OCUeJogeBwnTt0bNqf8IAhex4lTI5tBdeq8Trns27fcYIuLBC+y84033N5zI1dATQ2leHtkxN3hkSefFS8JnuSTlywFpuu8qlPn1Qt5p47mEzcJXiQSjtrQVOdVgyHyp1SrpVQmeBknPvPlCmowJPq8QvugaZq7mDajn1f0eQWvo+s6dbM8u59X9HkFr1MxTbfOO6OfVx59F7yO8+g7NPXzOuUHQfA6TpzOWB4WhHZixvIwSD+v4G2a49Pt5wXR5xXaAydOjVxhutog+ryC1ymVCxiGPl1tWLlqtZsIS6lM8DIV03Rv2FauWj0z55VSmeBlmuPTzXlFn1dolysviD6v0KZXXtHnFdoW0ecVzgtEn1doO0SfV2g7RJ9XaFtEn1doW0SfV2hbRJ9XOC9u2ESfV2hLRJ9XaDtEn1doa0SfV2hLRJ9XaGtEn1doW0SfV2hbTqvPe8WnVtqwsP+LtVAU3xzH9tcb361Go1vdtlrqFGdO52rXqtfJGgUyWZ2f3nYxd247yGBfEi0WoW7bZ+3XD2p+p6P5P1B68fznCsYMfd5ZdV7V7/9QJz7/WVcWPXDndewZYts2pbLJ8Umde7YMsaavxNc/l+L4ZJZSpYpt24s6vzOhHc6/Z+u8rQ7cD5Jq1WIqk2PDpVE2XV7FzE6xaVWAZb0h0tkcNasun/vncP5n1Xm9oM9bty33q13fPHXbJl8sU62WeODWXqySTr1mUs6kuXPjUoqFIqWySd22PfvmXpQr7gLO//v1ed1+3kSip2X9vM2T9FLAntNcbBuzVuPH37qI3kQEtbOXcM8Swolu+pMdbL1hBdWqBWcRvB/I/Dx6dV3Ia3L0eZ1+XtXp59WiMXRdpzMa/0imB+c6H5/PRzQS4oHfjnL3wxWsphTB71eIdYToSXTi8/nOC38thr8dfV69kKcnqaFCY8ktk5kiEo6y8fprOZk+SbliUrcqBMNh+nr7cR7U1OIxisUS5VKJYjHHQP8ARq5AaiiFkc3gLHoku5MLHlOrV+nr7Rf7Yn9O+6+8/Cp6Ie+2Mvi23PwVG6C/v5dCPk++UAJwl4yb62tzdZ85252bPiUYdseezRhnYmJf7L9/zJLBAaKxGCdOTDZy9K6uDrLZIsPDB+ctCltWdcYkmg04dTe9kHcn01zSWOiY+Zwm9sX+0dGj7rG6ujpQa1Wbnbt2ATM71SumSSgYnPW9kXvkMSs1skZmxhinlOHcFZ7NGLEv9k9nv/Eo0Ltce83n+R+bCm28wSXdjwAAAABJRU5ErkJggg==\")","module.exports=require(\"alt1/base\").ImageDetect.imageDataFromBase64(\"iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAehm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYX5ysAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAQyklEQVR42u1da4wlx1X+uh7dfR9zZ2Zndvbh127sTWxjr53YRCaOQyxZBIMTBQmIBD8QIfIPIBL/CD9AJARZAgmiSBGOAhFIEUIyivIDQkA8xGPBD4Gdtb12FK8fa++ud2ZnZ+6de/t2V1dV86P61O17vSYOhJm7q/qk0b1zu7u66pzTp0+dOnVO9LGff7i6tPEmGOcAAM4FCMZoNGGNgYwTAECpCv+9+T99GqNRVRZCxAAArRUqW02d0/wEMNU2/d9sh/rDuYAxGtYYMM79/9T3UhVgnE8db44nabVQjMd+THROsz9Ej+a46R7N/jXHS32j62fbbLb9P91vltazNKZ+NMdM47vS+WetxXi0g1IpqCJHxCKwiOPSxgXccOQIvvylL+B3Pvd5ZC//K8RL3zmFN149DcYYGOfQZQlrDRaXV1DkOXSpIGQMaw0YcwRWRQ4AEFIiThLkWQatS8RJCsY4dKkAAGm7DV1OCKiK3N+HiOnaif0xIeOpewJAq93BaGcAAFNM1mUJISWsMRAybvyuwDhHnCRQReH7ZK1FnKT+vHw8AmPc/0ZjnO3/7HnUfrP/SZpip7891R9qR8gYQgqoopjqN2Pc07JJf6JrNhxell6M86lrm/xSRX7F8s8ag1LlyEc7WFldxrvfdRRpuoBnT53E++/5AB75wh/hW3/5NaQtic2shACAOEmhihxpu+0739/aRLe3OMUs6mC728Vw0AdjKbLhENYapK0O8vEIaaszEY4smyJcu9v1wkSdJwgpa8I7AUvSFKOdAYSMsdPfvixhSACoj0RwascJBffXCCmQZ5lnPjHLWuMZQczw2soaCCHRWehhtDPwxGeMTwmptQZxkvp7NYXS9U83hJZBFXl9f+bPT9ttp40YhyoK/7CoIoeQcqpda8zUwzThV3pF8k/lY6g8w203H8Pv/dYv4aZrjiHdv4Ynnn0Njz/+FO7/8Ydw4h++haf+499QvfqPeOqMQnT8ng9X515/zTeapI4gSZqiyHPfOfpdGwNTllhcXsFoOIQuC38sGw2RpB1wHkHXwmDqASZp6n+LwMB5NNUeAEgpYWeuoT7Q9yRNYUwFzqO3HBMygS6LqVcl9a15rjEVKlgIzt/SBpfS338WXEp/jZCJHwO1z6X0Y6b70rFmP5rjarY5e02Tbs02tTEQ9UM02//muK8U/kkpsX1xHbfffhxf++xPYj1fhY26YK02Kgh8+StfheYpui2OC6dP4ut/9ySuOXoTolvv/mD15tkzsMags9DD2dMvRAgI2EV0llYrnWd48q9/H/mghTc2LmE9Uzh6aBmpTAAW4S++/jdYUSdx5PDN+Kt/fhpPXhTObCDV3XzyAwJ2CyyK8ImH7seT//Jf+NO/fx7D7W089rlfwXke4dc+/yhefO5Z/OLH7wO78SP44789gbWKo+hfBGsazwEBewFrLQ4dXsOpMxv4uY/+GO67+4dwrr2KT3/2K3ju6f/EPcdvxBPPnkav1cUH3iMxlIu47+73gAkh/OQhIGAvoEuF9Y1LGOwoYHAW5994FW0hcGn9HADg7BvncW59G2srS/jzb76I9x8Cjh/dB6G1Rpyk3q0RELDrZgMXePnsJrgZIS42cHpT46VTp/CpTzyE776xiesO78NHHngQjz76RaysdiGuux0nnzk5MRsY41Oz04CA3ULSauOZk8/h9fUdPPHSm4gZ8KN3Hse1a108eO8xLDOFz/zGZxBXFf7gNz+NpUrh+aefQ/Teex+oXn/1NFSRY/XAQbz8/NPB2xCwq1g+cG2VDQe465Yb8Morr8FUDHfcciN+4kPvwzNP/DuG4ww/+9MP4fFT6xgNLuDm1Qrrwzedq+zSxQvQpUaSpsFVFrDr2Hfo+spoDVOMcc/xo3jxpTMYF2OgYqgQ4aEP34mXv30ad953D374phgL1x2BPX3CmQ261H7lJiBg170NxkDKGDLt4MS3XwZEjIXl/RiXBlv9IR775gm866478PEfuRYXdjr46p98A5/60vPObDj9necRJyl6S0vBbAjYdXT3rVVCuNVJRABnzAXmqKJehteIqgpJzKGUho0Yjh671S1SWGt8bEBAwK4Lb28ReZbBWot2t4tsOEScthCnbVhr0On1sLO1hYXFRfS3LsEag7TdASuKHEJIF9FkgrssYPdBgssYQ55ltevWQhU5Wu0O+pubEDJGxEUdYBWjKHKwJEl9lJUJq2wBewCK4nPRZhZCCh/lV+QuxFMVOUxZgjEOxjmSJHWal2JDQ2xDwF6BQkddWKlG2m4jTlLk4xHiJIWQEkma1mGd3GneQLaAufA4WAtrjQu9LFUdSyyQtjqIk+TyAt/p9qCKHAuLS2GFLWBPQMH2uiwxzkYuaF2XGA760KWCLjXiJEGROzlVRY5Ot+c0b5ykGGcjH0wdELDbaLU7botRvbPFady03oqkMBz0waXEOBv5IDJW5Fltc3B0u71AxYBdR7vbRX9rE1o7h0EzPFcVBbQukbY66HZ7Pva8yDOneYUUsNZgNBwGSgbsOrLh0Alnb9FvIE1St7+Q/lSRY1TvtxPS7ZBmWut6lyp/y/6vgIDd8jRMbNvUm7GqcLufFxaX6oU0t+KWDYfQWrtgdFHbusFVFrAnwss59u1fg5DC7XRmk+3xQsbob20ibXW8fAopIYRwmndiRwRvQ8BeaF6O9fNnfdIR+o1SMszKJ2PcaV4AYRdFwJ6CBHS0M/C5L/LxyGvapdX9UzJK35kQoqGik0DJgD2xeRljPp4BcME6O/1txEmKYX+7TvAykU9vNjgnsZhKohEQsJvQukS72wUAdBZ6yLOsVqguzsFaC86jOm1WDq01RJKkEEJClzrYvAF7Amtt7SZzKa5GOwO/XJwNh1g9cBBFnte51zSEkI3AHO5WNcIKW8BeYPXAQQwHfR8c1lnoedPBWoNsNPQrwNa6zJKTkMh6NhdCIgP2Auvnz4IxjsXlFez0t70FkGcZFpdXXLxvIycaY42QSIqXXFxeCZQM2IMJG0er20F/a3M63SznGGcjf97i8opfgSuK3Nm8tASXj0e4/2d+oQrkDJhHvHbqpJfVJEkhjNHQpUKcuBSU//TYnwUqBcwlrrnxFu8HNkbTBkwLXSpyCgd/WcC8oqIM9wAoqizENgTMP5qxDV54ZeI2wBkTzN2A+QXJJ8kr41ygyMZ+BSMgYF7BeQRrLYpsDM4pM/pMGaWAgHlFsxqRKIrcrx2H5eGAeYbL4eAma0WRT6LKRFgaDrgCQHIqhHA2L0lzQMCVADc/E5MiggEBV4bNyxEntc1LVRVpx2ZAwDyDSukKGTs/78LiEnx+1ICAebZ5hcTC4pLTwqPhwKfYCQiY/wlbjHE2wmg4mFTATNI0mA0Bc43ZOtIsqWuwNeMmAwLmFeNs5OZnPhi9TuQbMqMHzDNIPq0xk/y8QsZua3FYJg6YZ3uX83oLfDwxG3SpIGQcosoC5hrGVC53b6mmdw8DCIn2AubbbKjlc2r3MGUpCd6GgCvB26CK3GleIWPvKgtRZQHzjCLPfd5eIWMw2nw5zkZB8wbMvealtP66VM7mBTCVEzUgYF7h050WOdjyyn6faC8gYN5BifaWV/aDbW1uuGJtWRYWKQLm29tgjC/vurW5MV1EMCxSBMy11p2RT+8qY5xDxiG5dMD8QsYJGOcTVxkw2UkxHPQDhQLmFiSfkyKC9S6K4G0IuFK8DZQlkgGu4mCI5w2Yd5CMUoVMIYTwGSKN0YFCAXOLbDT0hQaFEBBauxSnANBbWsK+Q9dXuix9FW6yLyjybPbTWgNrXCLg5vnevVGfR/ETQkof1kb3pe9pu42sUUKWMQYhY+TjEdJWZ+qeVNKTMqioIvf78CjQiJKp0IqMtdZXnZlKYsy4b5tA40rbbQwHfX9/ay3a3S5UUfjrqD1V5JBxDDXOwO0If/jLt+JXv/gCWNKBiBMkaQpVFFBF7u8fJ4lvn+hFdIgTp2lGOwMwzr1p16Q5vTmJX7OfVxP/2p0uLm2su35pTTspbKOzpa++zRjzCxjUQapfQWlRnQ1ivSHtynC6Qc0G/EwExvq2mgIzHPRhrZkY5A3XiKsAMyk74HaRskksspC+LWuM96D4jIKcT85v1PQiG4oYRHWY3Y5qC11Ov43iJPX1EwjtbtflOI4TqHyMPBvidx8+gjvXcnzy/uugxiNoVSCvd6uQoKoiB+fCx5YQ3XSp/SbD/tYmOgu9xoNiPFMvx6+rmX8TxWLf6m2gJ6uz0JvSRKoofJp1Ve+8iJPUMzxu1LUgQjS1CwX8EDGoZJEuS88QChCiJ5TOaTI7rrcskdDRgBxDrNcC1JbfIdIoCWqt8fdQRV7Xty29pnCvpaQmpoQqcqStTi0EcW1rySlGqqJoMLXAA3f18NE7Sqjti/jYzRK3XduC1SUQRVPaXgiJIs99bImQMToLPQgpUOQ58vHIn0PC4rRq7AV1ll9XO/8u621oSj11tvkUxUkCXZbo9haxb/9a45UhJ3XcJPdEiZMUXHL/lLrfZd2ORtpuQ0iJtN32WoUG54hceKFykUQMcZL4AQkp/XUkeE0CUz9o0MR8uiZtt32R5rjh6yZtSP1qggo5U7tCCn+tNa6wc0eUeOSTazDjPqxWyLc28esPXgtR5bDawGpdC53wGoiYSYJC2p6ip5pvRVFXxKHX6Sy/rmb+kXCTt4Efefdtv33h3BkwzhFFDEU+RlXZ+uktUaraRtIlrLWQcYz+1iVUVYWIRYiTBFHkXk9RvWCnSwWtS2hV21ARYLRG0mp5xtArpKpch1sdp92i+pVX5GNXTG6cwVqDqqqgigKtTgelUjDGIGIRuJAolUKr04G1FhGLYLT2gmiMhowTf7+mieBeSy7dFRcCUcRAZQ50WYJxDi5cMWcZJ+67LlFVFoxz5OMMxmhXM7eqAGvwyMM34H3HWoiEhLI9qLKNxaUuDqz28NQrY2hd1m06eu4/eBg7/W0krdRXgKwqV4OMFo2IPlVV+euElIgi5vtD/DLGXLX840KgVG7OcPi6o4huvfuD1bkzr0DIGL2lJayfPztlf9CEhJ46VRT+6WlOfCiTCT1B9IQ0Jw8A0Op2MBoM0O0tuuuyzL8ynO1IFTmlnzARwehV1pxE0NOuy9JPpCbnld6uot9oktCcCDQnGqsHDmL9/FlvKsxO8OgBoLa9PR0xKJVDFzlKVaCqLKIoQlVVEEKCcQFEEZZWDzTMDOPNkuab4XL3ITqQdiX60kSH+EWmxtXIv9UDBzHY3oYuFQ5fXwvv+vmz9SsmweLSMsq6o2mr42eKzU9ZG9Fc1BnVtUJZlugu9DDcGfhrjVbgIvbHyfaZ/Z/aLMvSfzZtJTpfSgkuJrNXar95vV9KrM9t3sto5Y/P9n22L7PX0j2b51A7szRqTkqIJtRm81jzGurbLA3oPm/Hk1l6UZ+vRv5dunjBe3nWDl2D6L33PlC98t0Xptwmu+FSaj5xs8Y8aYgfpEuJNEhTszU1a3O23dRa79SF1NRYe+kCnP28GvmnS4Wjx25xE7amC2NXXEpE9HrW62bOyjOGiib/IFxKbvKRNGbnwruD4iRF2m77CUTTDdSceVN/aSwTn6fwx2nG/L1cSDSh+f9yAV7N/POKQ5coihzRhx78qerixsY7XuUQQriK23VSaq31O77m7WC0QrvTQ5YNwbl42zaa90uS1K8IDnf6U69rAH4i9f3ie/X1/3rt90u//+04rnb+re7fj/8GO6Pn3eR9G3UAAAAASUVORK5CYII=\")","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar SearchData = /** @class */ (function () {\n function SearchData() {\n this.reaper = false;\n this.task = 'Dragons';\n this.probability = 0;\n }\n return SearchData;\n}());\nexport { SearchData };\nvar SearchAlgorithm = /** @class */ (function () {\n function SearchAlgorithm() {\n this.data = new SearchData();\n }\n // Lookup best possible assignment based on input string\n SearchAlgorithm.prototype.lookup = function (lookup_1) {\n return __awaiter(this, arguments, void 0, function (lookup, skipReaper) {\n var probabilities, reapersResponse, reapers, _i, reapers_1, a, _a, _b, b, assignmentsResponse, assignments, _c, assignments_1, a, _d, _e, b, _f, _g, b, key, aliasKeys, _h, aliasKeys_1, aliasKey, creatureKeys, _j, creatureKeys_1, creatureKey;\n if (skipReaper === void 0) { skipReaper = false; }\n return __generator(this, function (_k) {\n switch (_k.label) {\n case 0:\n probabilities = {};\n if (!!skipReaper) return [3 /*break*/, 3];\n return [4 /*yield*/, fetch(\"./data/reapers.json\")];\n case 1:\n reapersResponse = _k.sent();\n return [4 /*yield*/, reapersResponse.json()];\n case 2:\n reapers = _k.sent();\n for (_i = 0, reapers_1 = reapers; _i < reapers_1.length; _i++) {\n a = reapers_1[_i];\n probabilities[a[\"index\"]] = {\n reaper: true,\n index: Math.round(this.similarity(a[\"index\"], lookup) * 10000) / 100,\n creatures: {}\n };\n for (_a = 0, _b = a[\"creatures\"]; _a < _b.length; _a++) {\n b = _b[_a];\n probabilities[a[\"index\"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175;\n }\n }\n _k.label = 3;\n case 3: return [4 /*yield*/, fetch(\"./data/assignments.json\")];\n case 4:\n assignmentsResponse = _k.sent();\n return [4 /*yield*/, assignmentsResponse.json()];\n case 5:\n assignments = _k.sent();\n for (_c = 0, assignments_1 = assignments; _c < assignments_1.length; _c++) {\n a = assignments_1[_c];\n probabilities[a[\"index\"]] = {\n reaper: false,\n index: Math.round(this.similarity(a[\"index\"], lookup) * 10000) / 125,\n alias: {},\n creatures: {}\n };\n for (_d = 0, _e = a[\"alias\"]; _d < _e.length; _d++) {\n b = _e[_d];\n probabilities[a[\"index\"]].alias[b] = Math.round(this.similarity(b, lookup) * 10000) / 150;\n }\n for (_f = 0, _g = a[\"creatures\"]; _f < _g.length; _f++) {\n b = _g[_f];\n probabilities[a[\"index\"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175;\n }\n }\n // Find highest likelihood of the search\n for (key in probabilities) {\n if (probabilities[key].index > this.data.probability) {\n this.data.task = key;\n this.data.reaper = probabilities[key].reaper;\n this.data.probability = probabilities[key].index;\n }\n if (probabilities[key].alias) {\n aliasKeys = Object.keys(probabilities[key].alias);\n for (_h = 0, aliasKeys_1 = aliasKeys; _h < aliasKeys_1.length; _h++) {\n aliasKey = aliasKeys_1[_h];\n if (probabilities[key].alias[aliasKey] > this.data.probability) {\n this.data.task = key;\n this.data.reaper = probabilities[key].reaper;\n this.data.probability = probabilities[key].alias[aliasKey];\n }\n }\n }\n if (probabilities[key].creatures) {\n creatureKeys = Object.keys(probabilities[key].creatures);\n for (_j = 0, creatureKeys_1 = creatureKeys; _j < creatureKeys_1.length; _j++) {\n creatureKey = creatureKeys_1[_j];\n if (probabilities[key].creatures[creatureKey] > this.data.probability) {\n this.data.task = key;\n this.data.reaper = probabilities[key].reaper;\n this.data.probability = probabilities[key].creatures[creatureKey];\n }\n }\n }\n }\n return [2 /*return*/, this.data];\n }\n });\n });\n };\n // Check the similarity of 2 strings\n SearchAlgorithm.prototype.similarity = function (s1, s2) {\n var longer = s1;\n var shorter = s2;\n if (s1.length < s2.length) {\n longer = s2;\n shorter = s1;\n }\n var longerLength = longer.length;\n if (longerLength === 0)\n return 1.0;\n return (longerLength - this.editDistance(longer, shorter)) / parseFloat('' + longerLength);\n };\n // Calculate the edit distance between 2 strings\n SearchAlgorithm.prototype.editDistance = function (s1, s2) {\n s1 = s1.toLowerCase();\n s2 = s2.toLowerCase();\n var costs = [];\n for (var i = 0; i <= s1.length; i++) {\n var lastValue = i;\n for (var j = 0; j <= s2.length; j++) {\n if (i === 0) {\n costs[j] = j;\n }\n else if (j > 0) {\n var newValue = costs[j - 1];\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {\n newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\n }\n costs[j - 1] = lastValue;\n lastValue = newValue;\n }\n }\n if (i > 0) {\n costs[s2.length] = lastValue;\n }\n }\n return costs[s2.length];\n };\n return SearchAlgorithm;\n}());\nexport { SearchAlgorithm };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as a1lib from \"alt1\";\nimport DialogReader from 'alt1/dialog';\nvar SlayerData = /** @class */ (function () {\n function SlayerData() {\n this.selectYourOwn = false;\n this.ticket = false;\n this.reaper = false;\n this.count = [];\n this.task = [];\n }\n return SlayerData;\n}());\nvar SlayerDialogReader = /** @class */ (function () {\n function SlayerDialogReader() {\n }\n SlayerDialogReader.prototype.read = function () {\n return __awaiter(this, arguments, void 0, function (buffer) {\n var data, box, msg, countText, e, countText, e, i, msg, countText;\n if (buffer === void 0) { buffer = null; }\n return __generator(this, function (_a) {\n if (!buffer) {\n buffer = a1lib.captureHoldFullRs();\n }\n if (!this.dialogReader) {\n this.dialogReader = new DialogReader();\n }\n this.data = new SlayerData();\n data = this.dialogReader.find(buffer);\n if (!data)\n return [2 /*return*/, null];\n box = this.dialogReader.read(buffer);\n if (!box)\n return [2 /*return*/, null];\n if (box.text && (!box.opts || box.opts.length !== 2)) {\n msg = box.text.toString();\n // Parsing logic for various types of dialogs\n if (msg.toLowerCase().includes(\"select your own task\")) {\n this.data.selectYourOwn = true;\n }\n if (msg.toLowerCase().includes(\"require you to collect\")) {\n this.data.reaper = true;\n countText = msg.substring(msg.indexOf(\"collect \") + 8, msg.indexOf(\" souls\"));\n this.data.count[0] = parseInt(countText);\n this.data.task[0] = msg.substring(msg.indexOf(\"battle: \") + 8, msg.indexOf(\". Can\"));\n }\n if (msg.toLowerCase().includes(\"new task is to kill\")) {\n e = msg.substring(msg.indexOf(\"kill \") + 5, msg.length - 1);\n countText = e.substring(0, e.includes(\",\") ? e.indexOf(\",\") : e.indexOf(\" \"));\n this.data.count[0] = parseInt(countText);\n this.data.task[0] = e.substring((e.includes(\",\") ? e.indexOf(\",\") : e.indexOf(\" \")) + 1);\n }\n if (msg.toLowerCase().includes(\"still need to kill\")) {\n e = msg.substring(msg.indexOf(\"kill \") + 5);\n this.data.count[0] = parseInt(e.substring(0, e.indexOf(\" \")));\n this.data.task[0] = e.substring(e.indexOf(\" \") + 1, e.includes(\".\") ? e.indexOf(\".\") : e.length - 1);\n }\n if (msg.toLowerCase().includes(\"still hunting\")) {\n this.data.task[0] = msg.substring(msg.indexOf(\"hunting \") + 8, msg.indexOf(\";\"));\n }\n }\n if (box.opts && box.opts.length === 2 && (box.title && box.title.toLowerCase().includes(\"change your assigned slayer task\"))) {\n this.data.ticket = true;\n for (i = 0; i < box.opts.length; i++) {\n msg = box.opts[i].text;\n countText = msg.substring(0, msg.indexOf(' '));\n this.data.count[i] = parseInt(countText);\n this.data.task[i] = msg.substring(msg.indexOf(' ') + 1, msg.includes('(') ? msg.indexOf('(') - 1 : msg.length);\n }\n }\n return [2 /*return*/, this.data];\n });\n });\n };\n return SlayerDialogReader;\n}());\nexport { SlayerDialogReader };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as a1lib from \"alt1\";\nimport * as OCR from \"alt1/ocr\";\nimport * as settings from \"./settings\";\nvar imgs = a1lib.webpackImages({\n slayer_expanded_RS3: require(\"../images/data/slayer_expanded_RS3.data.png\"),\n slayer_expanded_OSL: require(\"../images/data/slayer_expanded_OSL.data.png\"),\n reaper_expanded_RS3: require(\"../images/data/reaper_expanded_RS3.data.png\"),\n reaper_expanded_OSL: require(\"../images/data/reaper_expanded_OSL.data.png\"),\n slayer_collapsed_RS3: require(\"../images/data/slayer_collapsed_RS3.data.png\"),\n slayer_collapsed_OSL: require(\"../images/data/slayer_collapsed_OSL.data.png\"),\n reaper_collapsed_RS3: require(\"../images/data/reaper_collapsed_RS3.data.png\"),\n reaper_collapsed_OSL: require(\"../images/data/reaper_collapsed_OSL.data.png\"),\n});\nvar UICounterData = /** @class */ (function () {\n function UICounterData() {\n }\n return UICounterData;\n}());\nexport { UICounterData };\nvar UICounterReader = /** @class */ (function () {\n function UICounterReader() {\n this.countFont = null;\n this.taskFont = null;\n this.data = null;\n }\n UICounterReader.prototype.read = function (buffer) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, width, height, _i, _c, match, countText;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n if (!buffer)\n buffer = a1lib.captureHoldFullRs();\n if (!!this.countFont) return [3 /*break*/, 2];\n _a = this;\n return [4 /*yield*/, fetch(require(\"../fonts/aa_10px_mono.fontmeta.json\")).then(function (r) { return r.json(); })];\n case 1:\n _a.countFont = _d.sent();\n _d.label = 2;\n case 2:\n if (!!this.taskFont) return [3 /*break*/, 4];\n _b = this;\n return [4 /*yield*/, fetch(require(\"../fonts/aa_8px_mono.fontmeta.json\")).then(function (r) { return r.json(); })];\n case 3:\n _b.taskFont = _d.sent();\n _d.label = 4;\n case 4:\n // Reset data for next search\n this.pos = [];\n this.data = null;\n // Look for all UI Elements until we find one, then the rest will get skipped\n this.findUIElement(buffer, imgs.slayer_collapsed_OSL, { reaper: false, collapsed: true, OS: true });\n this.findUIElement(buffer, imgs.slayer_expanded_OSL, { reaper: false, collapsed: false, OS: true });\n this.findUIElement(buffer, imgs.slayer_collapsed_RS3, { reaper: false, collapsed: true, OS: false });\n this.findUIElement(buffer, imgs.slayer_expanded_RS3, { reaper: false, collapsed: false, OS: false });\n this.findUIElement(buffer, imgs.reaper_collapsed_OSL, { reaper: true, collapsed: true, OS: true });\n this.findUIElement(buffer, imgs.reaper_expanded_OSL, { reaper: true, collapsed: false, OS: true });\n this.findUIElement(buffer, imgs.reaper_collapsed_RS3, { reaper: true, collapsed: true, OS: false });\n this.findUIElement(buffer, imgs.reaper_expanded_RS3, { reaper: true, collapsed: false, OS: false });\n // If we don't find any data or we found too many matches then return\n if (!this.data && this.pos.length == 0)\n return [2 /*return*/, null];\n width = this.data.collapsed ? imgs.slayer_collapsed_OSL.width : imgs.slayer_expanded_OSL.width;\n height = this.data.collapsed ? imgs.slayer_collapsed_OSL.height : imgs.slayer_expanded_OSL.height;\n // Loop the results and return the data we find\n for (_i = 0, _c = this.pos; _i < _c.length; _i++) {\n match = _c[_i];\n // Overlay a rectangle around the matched area on screen if we're running in alt1\n if (window.alt1 && alt1.permissionOverlay && settings.controller.data.ui.counter)\n alt1.overLayRect(a1lib.mixColor(255, 255, 255), match.x, match.y, width, height, 500, 3);\n // Get the pixel data for the matched area\n this.data.img = buffer.toData(match.x, match.y, width, height);\n countText = OCR.findReadLine(this.data.img, this.countFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], this.data.collapsed ? 10 : 72, 15, 30, 3);\n this.data.count = parseInt(countText.text);\n if (!this.data.collapsed)\n this.data.task = OCR.findReadLine(this.data.img, this.taskFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], 9, 28, 156, 3).text;\n }\n return [2 /*return*/, (!this.pos || this.pos.length == 0) ? null : this.data];\n }\n });\n });\n };\n UICounterReader.prototype.findUIElement = function (buffer, img, mode) {\n if (!this.data && this.pos.length == 0)\n this.pos = buffer.findSubimage(img);\n if (!this.data && this.pos.length > 0)\n this.data = { reaper: mode.reaper, collapsed: mode.collapsed, OS: mode.OS, img: null, count: -1, task: null };\n };\n return UICounterReader;\n}());\nexport { UICounterReader };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// Fetch a single assignment based on the index or alias\nexport function get(assignment) {\n return __awaiter(this, void 0, void 0, function () {\n var response, data, _i, data_1, a, _a, _b, b, error_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 3, , 4]);\n return [4 /*yield*/, fetch(\"./data/assignments.json\")];\n case 1:\n response = _c.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _c.sent();\n for (_i = 0, data_1 = data; _i < data_1.length; _i++) {\n a = data_1[_i];\n if (a[\"index\"].toLowerCase() === assignment.toLowerCase()) {\n return [2 /*return*/, a];\n }\n for (_a = 0, _b = a[\"alias\"]; _a < _b.length; _a++) {\n b = _b[_a];\n if (b.toLowerCase() === assignment.toLowerCase()) {\n return [2 /*return*/, a];\n }\n }\n }\n return [2 /*return*/, null];\n case 3:\n error_1 = _c.sent();\n console.error(\"Error fetching data:\", error_1);\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n// Get an array of the index\nexport function getIndexList() {\n return __awaiter(this, void 0, void 0, function () {\n var dataList, response, data, _i, data_2, a, error_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n dataList = \"\";\n return [4 /*yield*/, fetch(\"./data/assignments.json\")];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _a.sent();\n for (_i = 0, data_2 = data; _i < data_2.length; _i++) {\n a = data_2[_i];\n dataList += \"\\n\\r\");\n }\n return [2 /*return*/, dataList];\n case 3:\n error_2 = _a.sent();\n console.error(\"Error fetching data:\", error_2);\n return [2 /*return*/, \"\"];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// Assuming decodeHtml function is defined or imported elsewhere\nimport { decodeHtml } from '../extrafuncs';\n// Fetch a single creature based on the name\nexport function get(creature) {\n return __awaiter(this, void 0, void 0, function () {\n var response, data, _i, data_1, a, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n return [4 /*yield*/, fetch(\"./data/creatures.json\")];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _a.sent();\n for (_i = 0, data_1 = data; _i < data_1.length; _i++) {\n a = data_1[_i];\n if (decodeHtml(a[\"name\"].toLowerCase()) === creature.toLowerCase()) {\n return [2 /*return*/, a];\n }\n }\n return [2 /*return*/, null];\n case 3:\n error_1 = _a.sent();\n console.error(\"Error fetching data:\", error_1);\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// Assuming decodeHtml function is defined or imported elsewhere\nimport { decodeHtml } from '../extrafuncs';\n// Fetch a single master based on the name\nexport function get(master) {\n return __awaiter(this, void 0, void 0, function () {\n var response, data, _i, data_1, a, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n return [4 /*yield*/, fetch(\"./data/masters.json\")];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _a.sent();\n for (_i = 0, data_1 = data; _i < data_1.length; _i++) {\n a = data_1[_i];\n if (decodeHtml(a[\"name\"].toLowerCase()) === master.toLowerCase()) {\n return [2 /*return*/, a];\n }\n }\n return [2 /*return*/, null];\n case 3:\n error_1 = _a.sent();\n console.error(\"Error fetching data:\", error_1);\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// Fetch a single reaper based on the index or alias\nexport function get(reaper) {\n return __awaiter(this, void 0, void 0, function () {\n var response, data, _i, data_1, a, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n return [4 /*yield*/, fetch(\"./data/reapers.json\")];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _a.sent();\n for (_i = 0, data_1 = data; _i < data_1.length; _i++) {\n a = data_1[_i];\n if (a[\"index\"].toLowerCase() === reaper.toLowerCase()) {\n return [2 /*return*/, a];\n }\n }\n return [2 /*return*/, null];\n case 3:\n error_1 = _a.sent();\n console.error(\"Error fetching data:\", error_1);\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n// Get an array of the index as HTML option elements\nexport function getIndexList() {\n return __awaiter(this, void 0, void 0, function () {\n var dataList, response, data, _i, data_2, a, error_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n dataList = \"\";\n return [4 /*yield*/, fetch(\"./data/reapers.json\")];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _a.sent();\n for (_i = 0, data_2 = data; _i < data_2.length; _i++) {\n a = data_2[_i];\n dataList += \"\\n\\r\");\n }\n return [2 /*return*/, dataList];\n case 3:\n error_2 = _a.sent();\n console.error(\"Error fetching data:\", error_2);\n return [2 /*return*/, \"\"];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// Import the decodeHtml function\nimport { decodeHtml } from '../extrafuncs';\n// Fetch a single variant based on the creature name and variant name\nexport function get(creature, variant) {\n return __awaiter(this, void 0, void 0, function () {\n var response, data, _i, data_1, a, _a, _b, b, error_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 3, , 4]);\n return [4 /*yield*/, fetch(\"./data/creatures.json\")];\n case 1:\n response = _c.sent();\n return [4 /*yield*/, response.json()];\n case 2:\n data = _c.sent();\n for (_i = 0, data_1 = data; _i < data_1.length; _i++) {\n a = data_1[_i];\n if (decodeHtml(a[\"name\"].toLowerCase()) === creature.toLowerCase()) {\n for (_a = 0, _b = a[\"variants\"]; _a < _b.length; _a++) {\n b = _b[_a];\n if (b[\"name\"].toLowerCase() === variant.toLowerCase()) {\n return [2 /*return*/, b];\n }\n }\n }\n }\n return [2 /*return*/, null];\n case 3:\n error_1 = _c.sent();\n console.error(\"Error fetching data:\", error_1);\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n","// Import required modules\nimport * as main from './dochandler/main';\n// Export required modules\nexport * as animate from './dochandler/animate';\nexport * as change from './dochandler/change';\nexport * as hide from './dochandler/hide';\nexport * as hover from './dochandler/hover';\nexport * as main from './dochandler/main';\nexport * as show from './dochandler/show';\nexport * as open from './dochandler/open';\n// Function to get the side element based on the index\nexport function getSide(i) {\n var base = main.get.elid(\"base\");\n var side = main.get.elc(i === 0 ? \"left\" : \"right\", base);\n if (!side) {\n side = main.get.elc(\"single\", base);\n }\n return side;\n}\n","// Import required modules\nimport * as dochandler from '../dochandler';\n// Function to show the loading bar\nexport function loading() {\n var loadingBar = dochandler.main.get.elid(\"loading-bar\");\n if (loadingBar) {\n loadingBar.style.visibility = \"visible\";\n }\n}\n// Function to hide the loading bar\nexport function loadingStop() {\n var loadingBar = dochandler.main.get.elid(\"loading-bar\");\n if (loadingBar) {\n loadingBar.style.visibility = \"hidden\";\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n// Import all modules as namespaces\nimport * as settings from '../settings';\nimport * as dochandler from '../dochandler';\nimport * as extrafuncs from '../extrafuncs';\nimport * as masters from '../data/masters';\nimport * as reapers from '../data/reapers';\nimport * as assignments from '../data/assignnments';\nimport * as creatures from '../data/creatures';\nimport * as variants from '../data/variants';\nimport * as logger from \"../logger\";\n// Update the Creature variant shown\nexport function variant(i_1) {\n return __awaiter(this, arguments, void 0, function (i, creature, variant) {\n var side, data, imageContainer, imageElement, newSize, kills;\n if (creature === void 0) { creature = null; }\n if (variant === void 0) { variant = null; }\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Start loading animation\n dochandler.animate.loading();\n side = dochandler.getSide(i);\n // Return early if UI is limited or data is not available\n if ((settings.controller.data.ui.limited || dochandler.main.limitedLoaded) && (!creature || !variant)) {\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n // Fetch creature and variant from UI elements if not provided\n if (!creature) {\n creature = dochandler.main.get.elc(\"creatures\", side).value;\n }\n if (!variant) {\n variant = dochandler.main.get.elc(\"variants\", side).value;\n }\n logger.log(\"Change variant to: \".concat(creature, \"#\").concat(variant));\n return [4 /*yield*/, variants.get(creature, variant)];\n case 1:\n data = _a.sent();\n if (data) {\n // Update UI if not limited\n if (!settings.controller.data.ui.limited && !dochandler.main.limitedLoaded) {\n imageContainer = dochandler.main.get.elc(\"image-container\", side);\n imageContainer.innerHTML = data[\"image\"].replace(\"#\", \"%23\");\n imageElement = imageContainer.firstElementChild;\n newSize = extrafuncs.calculateAspectRatioFit(parseInt(imageElement.getAttribute(\"width\")), parseInt(imageElement.getAttribute(\"height\")), imageContainer.offsetWidth, imageContainer.offsetHeight);\n imageElement.style.maxWidth = \"\".concat(newSize.width, \"px\");\n imageElement.style.maxHeight = \"\".concat(newSize.height, \"px\");\n // Update stats\n updateStats(side, data);\n }\n kills = parseInt(dochandler.main.get.elc(\"kills\", side).innerHTML, 10);\n dochandler.main.get.elc(\"total-slayer-exp\", side).innerHTML = extrafuncs.numberWithCommas((data[\"slayer-exp\"] * kills).toFixed(2));\n }\n // Stop loading animation\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n });\n });\n}\n// Helper function to update stats\nfunction updateStats(side, data) {\n dochandler.main.get.elc(\"level\", side).innerHTML = data[\"level\"];\n dochandler.main.get.elc(\"slayer-level\", side).innerHTML = data[\"slayer-level\"];\n dochandler.main.get.elc(\"lifepoints\", side).innerHTML = data[\"lifepoints\"];\n dochandler.main.get.elc(\"defence\", side).innerHTML = data[\"defence\"];\n dochandler.main.get.elc(\"max-melee\", side).innerHTML = data[\"max-melee\"];\n dochandler.main.get.elc(\"max-ranged\", side).innerHTML = data[\"max-ranged\"];\n dochandler.main.get.elc(\"max-magic\", side).innerHTML = data[\"max-magic\"];\n dochandler.main.get.elc(\"max-necromancy\", side).innerHTML = data[\"max-necromancy\"];\n dochandler.main.get.elc(\"max-spec\", side).innerHTML = data[\"max-spec\"];\n // Update weakness and susceptibility\n var weaknessElem = dochandler.main.get.elc(\"weaknessBox\", side);\n weaknessElem.innerHTML = \"

Weakness

\" + data[\"weakness\"].join(\"\");\n var susceptibleElem = dochandler.main.get.elc(\"susceptibleBox\", side);\n susceptibleElem.innerHTML = \"

Susceptible

\" + data[\"susceptible\"].join(\"\");\n // Update experience values\n dochandler.main.get.elc(\"combat-exp\", side).innerHTML = extrafuncs.numberWithCommas(data[\"experience\"].toFixed(2));\n dochandler.main.get.elc(\"lifepoints-exp\", side).innerHTML = extrafuncs.numberWithCommas(data[\"lifepoint-exp\"].toFixed(2));\n dochandler.main.get.elc(\"slayer-exp\", side).innerHTML = extrafuncs.numberWithCommas(data[\"slayer-exp\"].toFixed(2));\n}\n// Update the Creature shown\nexport function creature(i_1) {\n return __awaiter(this, arguments, void 0, function (i, creature, variant) {\n var side, data, variantsElem_1;\n if (creature === void 0) { creature = null; }\n if (variant === void 0) { variant = null; }\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Start loading animation\n dochandler.animate.loading();\n side = dochandler.getSide(i);\n // Return early if UI is limited and no creature is provided\n if ((settings.controller.data.ui.limited || dochandler.main.limitedLoaded) && !creature) {\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n // Fetch creature from UI elements if not provided\n if (!creature) {\n creature = dochandler.main.get.elc(\"creatures\", side).value;\n }\n logger.log(\"Change Creature to: \".concat(creature).concat(variant ? \"#\".concat(variant) : ''));\n return [4 /*yield*/, creatures.get(creature)];\n case 1:\n data = _a.sent();\n if (data) {\n // Update variants if available\n if (data[\"variants\"] && !settings.controller.data.ui.limited && !dochandler.main.limitedLoaded) {\n variantsElem_1 = dochandler.main.get.elc(\"variants\", side);\n variantsElem_1.innerHTML = \"\";\n data[\"variants\"].forEach(function (a) {\n variantsElem_1.innerHTML += \"\");\n });\n if (!variant) {\n variant = data[\"variants\"][0][\"name\"];\n }\n }\n // Update the variant to reflect changes\n dochandler.change.variant(i, creature, variant);\n }\n // Stop loading animation\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n });\n });\n}\n// Update the reaper assignment data\nexport function reaper(task, count) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, assignment(2, task, count)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n}\n// Update the entire Assignment data\nexport function assignment(i, task, count) {\n return __awaiter(this, void 0, void 0, function () {\n var side, nameElement, slayer_exp, slayxp, data, total_exp, j, img, masterData, kills, _loop_1, j, j, j, j, j, _i, _a, a, defaultCreature, _b, creature_1, variant_1;\n var _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Ensure correct task loading conditions\n if (i === 1 && !dochandler.main.doubleLoaded) {\n console.error(\"Cannot load double slayer task if only 1 is displayed!\");\n return [2 /*return*/];\n }\n if (i === 2 && !dochandler.main.reaperLoaded) {\n console.error(\"Cannot load reaper task if 2 are displayed!\");\n return [2 /*return*/];\n }\n // Show loading animation\n dochandler.animate.loading();\n side = dochandler.getSide(i);\n nameElement = dochandler.main.get.elc(\"name\", side);\n if (!nameElement)\n return [2 /*return*/];\n // Check if the current task is the same as the new one\n if ((task == null && nameElement.innerHTML !== \"???\") || nameElement.innerHTML.toLowerCase() === task.toLowerCase()) {\n logger.log(\"Update task: [\".concat(count, \"] \").concat(task, \" \").concat(i === 0 ? \"(Default)\" : (i === 2 ? \"(Reaper)\" : \"(1 Slayer Token)\")));\n dochandler.main.get.elc(\"kills\", side).innerHTML = extrafuncs.numberWithCommas(count);\n slayer_exp = dochandler.main.get.elc(\"slayer-exp\", side);\n if (slayer_exp && slayer_exp.innerHTML !== \"\") {\n slayxp = parseInt(slayer_exp.innerHTML);\n dochandler.main.get.elc(\"total-slayer-exp\", side).innerHTML = extrafuncs.numberWithCommas((slayxp * count).toFixed(2));\n }\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n // Load new task data\n logger.log(\"Load task: [\".concat(count, \"] \").concat(task, \" \").concat(i === 0 ? \"(Default)\" : (i === 2 ? \"(Reaper)\" : \"(1 Slayer Token)\")));\n dochandler.main.get.elc(\"type\", side).innerHTML = i === 0 ? \"(Default)\" : (i === 2 ? \"(Reaper)\" : \"(1 Slayer Token)\");\n if (i === 2)\n dochandler.main.get.elc(\"type\", side).id = \"type-reaper\";\n return [4 /*yield*/, (i === 2 ? reapers.get(task) : assignments.get(task))];\n case 1:\n data = _d.sent();\n if (!data) {\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n // Update UI elements with the new data\n dochandler.main.get.elc(\"name\", side).innerHTML = data[\"index\"];\n dochandler.main.get.elc(\"name\", side).title = data[\"index\"];\n dochandler.main.get.elc(\"kills\", side).innerHTML = extrafuncs.numberWithCommas(count);\n if (dochandler.main.limitedLoaded) {\n total_exp = 0;\n dochandler.main.get.elc(\"total-slayer-exp\", side).innerHTML = extrafuncs.numberWithCommas(total_exp);\n }\n if (!(!settings.controller.data.ui.limited && !dochandler.main.limitedLoaded)) return [3 /*break*/, 6];\n dochandler.main.get.elc(\"masters\", side).innerHTML = \"
Assignment Range
\";\n j = 0;\n _d.label = 2;\n case 2:\n if (!(j < data[\"masters\"].length)) return [3 /*break*/, 5];\n img = \"\\\"\").concat(data[\"masters\"][j],\");\n return [4 /*yield*/, masters.get(data[\"masters\"][j])];\n case 3:\n masterData = _d.sent();\n kills = masterData[\"task-counts\"][data[\"index\"]];\n dochandler.main.get.elc(\"masters\", side).innerHTML += \"
\").concat(img, \" Kills: \").concat(kills, \"
\");\n _d.label = 4;\n case 4:\n j++;\n return [3 /*break*/, 2];\n case 5:\n _loop_1 = function (j) {\n dochandler.main.get.elc(\"masterInfo\".concat(j), side).addEventListener('click', function () { return dochandler.open.wiki.master(i, j); });\n };\n for (j = 0; j < data[\"masters\"].length; j++) {\n _loop_1(j);\n }\n // Update equipment data\n if (data[\"equipment\"]) {\n for (j = 0; j < 3; j++) {\n dochandler.main.get.elc(\"equipInfo\".concat(j + 1), side).innerHTML = j === 0 ? \"None\" : \"\";\n }\n for (j = 0; j < data[\"equipment\"].length; j++) {\n dochandler.main.get.elc(\"equipInfo\".concat(j + 1), side).innerHTML = data[\"equipment\"][j] || \"Database Empty\";\n }\n dochandler.main.get.elc(\"equipMore\", side).style.visibility = data[\"equipment\"].length < 3 ? \"hidden\" : \"visible\";\n }\n else {\n dochandler.main.get.elc(\"equipMore\", side).style.visibility = \"hidden\";\n dochandler.main.get.elc(\"equipInfo1\", side).innerHTML = \"Database Missing\";\n }\n // Update locations data\n if (data[\"locations\"]) {\n for (j = 0; j < 3; j++) {\n dochandler.main.get.elc(\"locationInfo\".concat(j + 1), side).innerHTML = j === 0 ? \"None\" : \"\";\n }\n for (j = 0; j < data[\"locations\"].length; j++) {\n dochandler.main.get.elc(\"locationInfo\".concat(j + 1), side).innerHTML = data[\"locations\"][j] || \"Database Empty\";\n }\n dochandler.main.get.elc(\"locationMore\", side).style.visibility = data[\"locations\"].length < 3 ? \"hidden\" : \"visible\";\n }\n else {\n dochandler.main.get.elc(\"locationMore\", side).style.visibility = \"hidden\";\n dochandler.main.get.elc(\"locationInfo1\", side).innerHTML = \"Database Missing\";\n }\n // Update creatures data\n if (data[\"creatures\"]) {\n dochandler.main.get.elc(\"creatures\", side).innerHTML = \"\";\n for (_i = 0, _a = data[\"creatures\"]; _i < _a.length; _i++) {\n a = _a[_i];\n if (!extrafuncs.listContains(data[\"hidden-creatures\"], a)) {\n defaultCreature = ((_c = data[\"default-creature\"]) === null || _c === void 0 ? void 0 : _c.split(\"#\")[0]) || \"\";\n dochandler.main.get.elc(\"creatures\", side).innerHTML += \"\");\n }\n }\n }\n // Set default creature and variant\n if (data[\"default-creature\"]) {\n _b = data[\"default-creature\"].split(\"#\"), creature_1 = _b[0], variant_1 = _b[1];\n dochandler.change.creature(i, creature_1, variant_1);\n }\n else {\n dochandler.change.creature(i);\n }\n _d.label = 6;\n case 6:\n // Stop loading animation\n dochandler.animate.loadingStop();\n return [2 /*return*/];\n }\n });\n });\n}\n","import * as dochandler from \"../dochandler\";\nimport * as settings from \"../settings\";\nexport function assignmentWikiPreview(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n dochandler.main.get.elc(\"preview-task-wiki\", side).style.visibility = \"hidden\";\n}\nexport function creatureWikiPreview(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n dochandler.main.get.elc(\"preview-creature-wiki\", side).style.visibility = \"hidden\";\n}\nexport function moreEquip(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n dochandler.main.get.elc(\"equipHidden\", side).style.visibility = \"hidden\";\n}\nexport function moreLocations(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n dochandler.main.get.elc(\"locationHidden\", side).style.visibility = \"hidden\";\n}\n","import * as dochandler from \"../dochandler\";\nimport * as settings from \"../settings\";\nexport function assignmentWiki(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n var showTimer;\n var hideTimer = null;\n showTimer = setTimeout(function () { return dochandler.show.assignmentWikiPreview(i); }, 500);\n dochandler.main.get.elc(\"task-wiki\", side).onmouseleave = function () {\n hideTimer = setTimeout(function () { return dochandler.hide.assignmentWikiPreview(i); }, 200);\n clearTimeout(showTimer);\n };\n dochandler.main.get.elc(\"preview-task-wiki\", side).onmouseenter = function () {\n if (hideTimer !== null)\n clearTimeout(hideTimer);\n };\n}\nexport function creatureWiki(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n var showTimer;\n var hideTimer = null;\n showTimer = setTimeout(function () { return dochandler.show.creatureWikiPreview(i); }, 500);\n dochandler.main.get.elc(\"creature-wiki\", side).onmouseleave = function () {\n hideTimer = setTimeout(function () { return dochandler.hide.creatureWikiPreview(i); }, 200);\n clearTimeout(showTimer);\n };\n dochandler.main.get.elc(\"preview-creature-wiki\", side).onmouseenter = function () {\n if (hideTimer !== null)\n clearTimeout(hideTimer);\n };\n}\nexport function moreEquip(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n var showTimer = setTimeout(function () { return dochandler.show.moreEquip(i); }, 500);\n dochandler.main.get.elc(\"equipMore\", side).onmouseleave = function () {\n clearTimeout(showTimer);\n };\n}\nexport function moreLocations(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n var showTimer = setTimeout(function () { return dochandler.show.moreLocations(i); }, 500);\n dochandler.main.get.elc(\"locationMore\", side).onmouseleave = function () {\n clearTimeout(showTimer);\n };\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as dochandler from '../dochandler';\nimport * as reapers from '../data/reapers';\nimport * as assignments from '../data/assignnments';\nimport * as settings from '../settings';\nimport * as slayer from '../slayer';\nimport * as logger from \"../logger\";\n// Define variables\nexport var doubleLoaded = false;\nexport var singleLoaded = false;\nexport var reaperLoaded = false;\nexport var suggestedLoaded = false;\nexport var limitedLoaded = false;\nexport var get;\n(function (get) {\n function elc(id, base) {\n return base.getElementsByClassName(id)[0];\n }\n get.elc = elc;\n function elid(id) {\n return document.getElementById(id);\n }\n get.elid = elid;\n function searchInput() {\n return document.querySelector(\"input[name='search-info']\").value;\n }\n get.searchInput = searchInput;\n})(get || (get = {}));\nexport var reset;\n(function (reset) {\n function single() {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!singleLoaded)\n return [2 /*return*/];\n return [4 /*yield*/, get.elid(\"base\")];\n case 1:\n baseElement = _a.sent();\n baseElement.innerHTML = \"\";\n singleLoaded = false;\n return [2 /*return*/];\n }\n });\n });\n }\n reset.single = single;\n function double() {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!doubleLoaded)\n return [2 /*return*/];\n return [4 /*yield*/, get.elid(\"base\")];\n case 1:\n baseElement = _a.sent();\n baseElement.innerHTML = \"\";\n doubleLoaded = false;\n return [2 /*return*/];\n }\n });\n });\n }\n reset.double = double;\n function reaper() {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!reaperLoaded)\n return [2 /*return*/];\n return [4 /*yield*/, get.elid(\"base\")];\n case 1:\n baseElement = _a.sent();\n baseElement.innerHTML = \"\";\n reaperLoaded = false;\n return [2 /*return*/];\n }\n });\n });\n }\n reset.reaper = reaper;\n function suggested() {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!suggestedLoaded)\n return [2 /*return*/];\n return [4 /*yield*/, get.elid(\"base\")];\n case 1:\n baseElement = _a.sent();\n baseElement.innerHTML = \"\";\n suggestedLoaded = false;\n return [2 /*return*/];\n }\n });\n });\n }\n reset.suggested = suggested;\n function searchBox() {\n return __awaiter(this, void 0, void 0, function () {\n var searchInfo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, get.elid(\"search-info\")];\n case 1:\n searchInfo = _a.sent();\n searchInfo.value = \"\";\n toggle.searchText();\n return [2 /*return*/];\n }\n });\n });\n }\n reset.searchBox = searchBox;\n})(reset || (reset = {}));\nexport var set;\n(function (set) {\n // Set to use a double document\n function double(task0_1, task1_1) {\n return __awaiter(this, arguments, void 0, function (task0, task1, bypass) {\n if (bypass === void 0) { bypass = false; }\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if ((task0 == null || task1 == null) && !doubleLoaded)\n return [2 /*return*/];\n logger.log(\"Load Double: [\".concat(task0.count, \"] \").concat(task0.name, \" | [\").concat(task1.count, \"] \").concat(task1.name));\n // Reset all others\n return [4 /*yield*/, reset.single()];\n case 1:\n // Reset all others\n _a.sent();\n return [4 /*yield*/, reset.reaper()];\n case 2:\n _a.sent();\n return [4 /*yield*/, reset.suggested()];\n case 3:\n _a.sent();\n if (!!doubleLoaded) return [3 /*break*/, 5];\n return [4 /*yield*/, setup.doubleAssignment()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [4 /*yield*/, dochandler.change.assignment(0, task0.name, task0.count)];\n case 6:\n _a.sent();\n return [4 /*yield*/, dochandler.change.assignment(1, task1.name, task1.count)];\n case 7:\n _a.sent();\n // Log history if not bypassed\n if (!bypass && task0.name && task1.name) {\n settings.change.addHistory({ type: 'double', tasks: [task0, task1] });\n }\n return [2 /*return*/];\n }\n });\n });\n }\n set.double = double;\n // Set to use a single document\n function single(task_1) {\n return __awaiter(this, arguments, void 0, function (task, bypass) {\n if (bypass === void 0) { bypass = false; }\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (task == null && !singleLoaded)\n return [2 /*return*/];\n logger.log(\"Load Single: [\".concat(task.count, \"] \").concat(task.name));\n // Reset all others\n return [4 /*yield*/, reset.double()];\n case 1:\n // Reset all others\n _a.sent();\n return [4 /*yield*/, reset.reaper()];\n case 2:\n _a.sent();\n return [4 /*yield*/, reset.suggested()];\n case 3:\n _a.sent();\n if (!!singleLoaded) return [3 /*break*/, 5];\n return [4 /*yield*/, setup.singleAssignment(0)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [4 /*yield*/, dochandler.change.assignment(0, task.name, task.count)];\n case 6:\n _a.sent();\n // Log history if not bypassed\n if (!bypass && task.name) {\n settings.change.addHistory({ type: 'single', tasks: [task] });\n }\n return [2 /*return*/];\n }\n });\n });\n }\n set.single = single;\n // Set to use reaper tasks doc\n function reaper(task_1) {\n return __awaiter(this, arguments, void 0, function (task, bypass) {\n if (bypass === void 0) { bypass = false; }\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (task == null && !reaperLoaded)\n return [2 /*return*/];\n logger.log(\"Load Reaper: [\".concat(task.count, \"] \").concat(task.name));\n // Reset all others\n return [4 /*yield*/, reset.single()];\n case 1:\n // Reset all others\n _a.sent();\n return [4 /*yield*/, reset.double()];\n case 2:\n _a.sent();\n return [4 /*yield*/, reset.suggested()];\n case 3:\n _a.sent();\n return [4 /*yield*/, setup.singleAssignment(2)];\n case 4:\n _a.sent();\n return [4 /*yield*/, dochandler.change.reaper(task.name, task.count)];\n case 5:\n _a.sent();\n // Log history if not bypassed\n if (!bypass && task.name) {\n settings.change.addHistory({ type: 'reaper', tasks: [task] });\n }\n return [2 /*return*/];\n }\n });\n });\n }\n set.reaper = reaper;\n // Set to use suggested tasks doc\n function suggested() {\n return __awaiter(this, arguments, void 0, function (bypass) {\n if (bypass === void 0) { bypass = false; }\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (suggestedLoaded)\n return [2 /*return*/];\n logger.log(\"Load Suggested!\");\n // Reset all others\n return [4 /*yield*/, reset.single()];\n case 1:\n // Reset all others\n _a.sent();\n return [4 /*yield*/, reset.double()];\n case 2:\n _a.sent();\n return [4 /*yield*/, reset.reaper()];\n case 3:\n _a.sent();\n return [4 /*yield*/, dochandler.main.setup.suggested()];\n case 4:\n _a.sent();\n // Log history if not bypassed\n if (!bypass) {\n settings.change.addHistory({ type: 'suggestion', tasks: null });\n }\n return [2 /*return*/];\n }\n });\n });\n }\n set.suggested = suggested;\n // Set search button\n function searchButtonText(s) {\n dochandler.main.get.elid(\"search-button\").innerHTML = \"\".concat(s, \". . .\");\n }\n set.searchButtonText = searchButtonText;\n // Set the search input\n function searchInput(s) {\n if (s == null)\n return;\n dochandler.main.get.elid(\"search-info\").value = s;\n dochandler.main.toggle.searchText();\n }\n set.searchInput = searchInput;\n})(set || (set = {}));\nexport var setup;\n(function (setup) {\n // Setup the main document\n function documentMain() {\n return __awaiter(this, void 0, void 0, function () {\n var nisElement, _a, reapersIndexList, assignmentsIndexList;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n nisElement = dochandler.main.get.elid(\"nis\");\n _a = nisElement;\n return [4 /*yield*/, fetch(\"./pages/doc/body.html\").then(function (r) { return r.text(); })];\n case 1:\n _a.innerHTML = _b.sent();\n // Setup event listeners\n dochandler.main.get.elid(\"infobutton\").addEventListener('click', dochandler.open.aboutInfo);\n dochandler.main.get.elid(\"menubutton\").addEventListener('click', dochandler.open.settingsPage);\n dochandler.main.get.elid(\"donatebutton\").addEventListener('click', dochandler.open.donate);\n dochandler.main.get.elid(\"backbutton\").addEventListener('click', settings.change.goPreviousHistory);\n dochandler.main.get.elid(\"forwardbutton\").addEventListener('click', settings.change.goNextHistory);\n dochandler.main.get.elid(\"search-button\").addEventListener('click', function () { slayer.searchTasks(); });\n dochandler.main.get.elid(\"search-info\").addEventListener('input', dochandler.main.toggle.searchText);\n dochandler.main.get.elid(\"search-info\").addEventListener('change', function () { slayer.searchTasks(); });\n dochandler.main.get.elid(\"search-info\").addEventListener('keyup', function (event) {\n switch (event.key) {\n case \"ArrowUp\":\n dochandler.main.set.searchInput(settings.search.getPreviousHistory());\n break;\n case \"ArrowDown\":\n dochandler.main.set.searchInput(settings.search.getNextHistory());\n break;\n }\n });\n return [4 /*yield*/, reapers.getIndexList()];\n case 2:\n reapersIndexList = _b.sent();\n dochandler.main.get.elid(\"search-info-list\").innerHTML = reapersIndexList;\n return [4 /*yield*/, assignments.getIndexList()];\n case 3:\n assignmentsIndexList = _b.sent();\n dochandler.main.get.elid(\"search-info-list\").innerHTML += assignmentsIndexList;\n return [2 /*return*/];\n }\n });\n });\n }\n setup.documentMain = documentMain;\n // Setup the base for double assignment\n function doubleAssignment() {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement, _a, _loop_1, i;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n limitedLoaded = true;\n baseElement = dochandler.main.get.elid(\"base\");\n _a = baseElement;\n return [4 /*yield*/, fetch(\"./pages/doc/dual.html\").then(function (r) { return r.text(); })];\n case 1:\n _a.innerHTML = _b.sent();\n _loop_1 = function (i) {\n var side, _c, extraInfo, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n side = dochandler.getSide(i);\n _c = side;\n return [4 /*yield*/, fetch(\"./pages/doc/example.html\").then(function (r) { return r.text(); })];\n case 1:\n _c.innerHTML = _e.sent();\n // Setup event listeners\n dochandler.main.get.elc(\"task-wiki\", side).addEventListener('click', function () { return dochandler.open.wiki.assignment(i); });\n dochandler.main.get.elc(\"task-wiki\", side).addEventListener('mouseover', function () { return dochandler.hover.assignmentWiki(i); });\n if (!!settings.controller.data.ui.limited) return [3 /*break*/, 3];\n extraInfo = dochandler.main.get.elc(\"extra-info\", side);\n _d = extraInfo;\n return [4 /*yield*/, fetch(\"./pages/doc/example-extra.html\").then(function (r) { return r.text(); })];\n case 2:\n _d.innerHTML = _e.sent();\n limitedLoaded = false;\n dochandler.main.get.elc(\"preview-task-wiki\", side).addEventListener('mouseleave', function () { return dochandler.hide.assignmentWikiPreview(i); });\n dochandler.main.get.elc(\"preview-creature-wiki\", side).addEventListener('mouseleave', function () { return dochandler.hide.creatureWikiPreview(i); });\n dochandler.main.get.elc(\"equipMore\", side).addEventListener('mouseenter', function () { return dochandler.hover.moreEquip(i); });\n dochandler.main.get.elc(\"equipHidden\", side).addEventListener('mouseleave', function () { return dochandler.hide.moreEquip(i); });\n dochandler.main.get.elc(\"locationMore\", side).addEventListener('mouseenter', function () { return dochandler.hover.moreLocations(i); });\n dochandler.main.get.elc(\"locationHidden\", side).addEventListener('mouseleave', function () { return dochandler.hide.moreLocations(i); });\n dochandler.main.get.elc(\"creature-wiki\", side).addEventListener('click', function () { return dochandler.open.wiki.creature(i); });\n dochandler.main.get.elc(\"creature-wiki\", side).addEventListener('mouseover', function () { return dochandler.hover.creatureWiki(i); });\n dochandler.main.get.elc(\"creatures\", side).addEventListener('change', function () { return dochandler.change.creature(i); });\n dochandler.main.get.elc(\"variants\", side).addEventListener('change', function () { return dochandler.change.variant(i); });\n _e.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n };\n i = 0;\n _b.label = 2;\n case 2:\n if (!(i < 2)) return [3 /*break*/, 5];\n return [5 /*yield**/, _loop_1(i)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4:\n i++;\n return [3 /*break*/, 2];\n case 5:\n // Adjust the doc for limited and full\n adjustForSettings();\n doubleLoaded = true;\n return [2 /*return*/];\n }\n });\n });\n }\n setup.doubleAssignment = doubleAssignment;\n // Setup the base for single assignment\n function singleAssignment(i) {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement, _a, side, _b, extraInfo, _c, statusElement;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n limitedLoaded = true;\n baseElement = dochandler.main.get.elid(\"base\");\n _a = baseElement;\n return [4 /*yield*/, fetch(\"./pages/doc/single.html\").then(function (r) { return r.text(); })];\n case 1:\n _a.innerHTML = _d.sent();\n side = dochandler.getSide(i);\n _b = side;\n return [4 /*yield*/, fetch(\"./pages/doc/example.html\").then(function (r) { return r.text(); })];\n case 2:\n _b.innerHTML = _d.sent();\n // Setup event listeners\n dochandler.main.get.elc(\"task-wiki\", side).addEventListener('click', function () { return dochandler.open.wiki.assignment(i); });\n dochandler.main.get.elc(\"task-wiki\", side).addEventListener('mouseover', function () { return dochandler.hover.assignmentWiki(i); });\n if (!!settings.controller.data.ui.limited) return [3 /*break*/, 4];\n extraInfo = dochandler.main.get.elc(\"extra-info\", side);\n _c = extraInfo;\n return [4 /*yield*/, fetch(\"./pages/doc/example-extra.html\").then(function (r) { return r.text(); })];\n case 3:\n _c.innerHTML = _d.sent();\n limitedLoaded = false;\n dochandler.main.get.elc(\"preview-task-wiki\", side).addEventListener('mouseleave', function () { return dochandler.hide.assignmentWikiPreview(i); });\n dochandler.main.get.elc(\"preview-creature-wiki\", side).addEventListener('mouseleave', function () { return dochandler.hide.creatureWikiPreview(i); });\n dochandler.main.get.elc(\"equipMore\", side).addEventListener('mouseenter', function () { return dochandler.hover.moreEquip(i); });\n dochandler.main.get.elc(\"equipHidden\", side).addEventListener('mouseleave', function () { return dochandler.hide.moreEquip(i); });\n dochandler.main.get.elc(\"locationMore\", side).addEventListener('mouseenter', function () { return dochandler.hover.moreLocations(i); });\n dochandler.main.get.elc(\"locationHidden\", side).addEventListener('mouseleave', function () { return dochandler.hide.moreLocations(i); });\n dochandler.main.get.elc(\"creature-wiki\", side).addEventListener('click', function () { return dochandler.open.wiki.creature(i); });\n dochandler.main.get.elc(\"creature-wiki\", side).addEventListener('mouseover', function () { return dochandler.hover.creatureWiki(i); });\n dochandler.main.get.elc(\"creatures\", side).addEventListener('change', function () { return dochandler.change.creature(i); });\n dochandler.main.get.elc(\"variants\", side).addEventListener('change', function () { return dochandler.change.variant(i); });\n _d.label = 4;\n case 4:\n statusElement = dochandler.main.get.elc(\"status\", side);\n if (settings.controller.data.ui.status) {\n statusElement.style.visibility = \"visible\";\n }\n else {\n statusElement.style.visibility = \"hidden\";\n }\n // Adjust the doc for limited and full\n adjustForSettings();\n if (i === 2) {\n reaperLoaded = true;\n }\n else {\n singleLoaded = true;\n }\n return [2 /*return*/];\n }\n });\n });\n }\n setup.singleAssignment = singleAssignment;\n // Setup the base for suggested\n function suggested() {\n return __awaiter(this, void 0, void 0, function () {\n var baseElement, _a, suggestType, _loop_2, i;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n baseElement = dochandler.main.get.elid(\"base\");\n _a = baseElement;\n return [4 /*yield*/, fetch(\"./pages/doc/suggested.html\").then(function (r) { return r.text(); })];\n case 1:\n _a.innerHTML = _b.sent();\n suggestType = dochandler.main.get.elid(\"type-suggest\");\n if (suggestType) {\n suggestType.addEventListener('click', function () { return window.open(\"https://runescape.wiki/w/Slayer_training/High-levelled\"); });\n }\n _loop_2 = function (i) {\n var element = dochandler.main.get.elid(\"suggestion-\".concat(i));\n if (element) {\n element.addEventListener('click', function () { return slayer.searchTasks(element.innerHTML); });\n }\n };\n for (i = 1; i <= 12; i++) {\n _loop_2(i);\n }\n suggestedLoaded = true;\n return [2 /*return*/];\n }\n });\n });\n }\n setup.suggested = suggested;\n // If limited, set the size of the base\n function adjustForSettings() {\n var baseElement = dochandler.main.get.elid(\"base\");\n var divideElement = dochandler.main.get.elid(\"divide\");\n var copyrightElement = dochandler.main.get.elid(\"copyright\");\n if (settings.controller.data.ui.limited) {\n baseElement.classList.remove(\"base-full\");\n if (divideElement) {\n divideElement.classList.remove(\"divide-full\");\n }\n copyrightElement.classList.remove(\"copyright-full\");\n }\n else {\n baseElement.classList.add(\"base-full\");\n if (divideElement) {\n divideElement.classList.add(\"divide-full\");\n }\n copyrightElement.classList.add(\"copyright-full\");\n }\n }\n})(setup || (setup = {}));\nexport var toggle;\n(function (toggle) {\n // Toggle if we are capturing screen or searching text\n function searchText() {\n var searchResult = slayer.searchResult;\n var autoCaptureEnabled = settings.controller.data.autoCapture.enabled;\n var searchInput = dochandler.main.get.searchInput();\n if (searchResult || (!autoCaptureEnabled && searchInput === \"\")) {\n dochandler.main.set.searchButtonText(\"Capture\");\n }\n else {\n dochandler.main.set.searchButtonText(\"Search\");\n }\n }\n toggle.searchText = searchText;\n})(toggle || (toggle = {}));\n","import * as dochandler from '../dochandler';\nimport * as settings from '../settings';\n// Open the Donate Page (https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ)\nexport function donate() {\n window.open(\"https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ\");\n}\n// Open the about info page\nexport function aboutInfo() {\n window.open(\"./pages/about.html\", null, \"width=680,height=550\");\n}\n// Open the settings page\nexport function settingsPage() {\n var settingsWindow = window.open(\"./pages/settings.html\", \"_blank\", \"width=420,height=550\");\n console.warn(\"Settings Opened!\");\n settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.window.console.warn(\"Settings Loaded!\");\n settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.addEventListener('keyup', function (e) {\n if ((e.which || e.keyCode) === 116) {\n // Prevent F5 key press from refreshing the page\n e.preventDefault();\n }\n });\n settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.addEventListener('beforeunload', function () {\n // Load the new settings and apply them\n settings.controller.load();\n dochandler.main.toggle.searchText();\n console.warn(\"Settings Closed!\");\n settingsWindow === null || settingsWindow === void 0 ? void 0 : settingsWindow.window.console.warn(\"Settings Saved!\");\n });\n}\nexport var wiki;\n(function (wiki) {\n // Opens the wiki page for a specific task\n function assignment(i) {\n var side = dochandler.getSide(i);\n var task = dochandler.main.get.elc(\"name\", side).innerHTML;\n if (task) {\n window.open('https://runescape.wiki/' + task + '_(Slayer_assignment)');\n }\n }\n wiki.assignment = assignment;\n // Opens the wiki page for a specific creature\n function creature(i) {\n var side = dochandler.getSide(i);\n var creature = dochandler.main.get.elc(\"creatures\", side).value;\n var variant = dochandler.main.get.elc(\"variants\", side).value;\n if (creature && variant) {\n window.open('https://runescape.wiki/' + creature + \"#\" + variant);\n }\n }\n wiki.creature = creature;\n // Opens the wiki page for a specific master\n function master(i, j) {\n var side = dochandler.getSide(i);\n var master = dochandler.main.get.elc(\"masterImage\" + j, side).alt;\n if (master) {\n window.open('https://runescape.wiki/' + master);\n }\n }\n wiki.master = master;\n})(wiki || (wiki = {}));\n","import * as dochandler from '../dochandler';\nimport * as settings from '../settings';\n// Show the specific Creature's preview wiki page\nexport function assignmentWikiPreview(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n dochandler.main.get.elc(\"preview-task-wiki\", side).style.visibility = \"visible\";\n}\n// Show the specific Creature's preview wiki page\nexport function creatureWikiPreview(i) {\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n dochandler.main.get.elc(\"preview-creature-wiki\", side).style.visibility = \"visible\";\n}\n// Show more Equipment for task\nexport function moreEquip(i) {\n var _a;\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n var equipHiddenElement = dochandler.main.get.elc(\"equipHidden\", side);\n if ((_a = equipHiddenElement.innerHTML) === null || _a === void 0 ? void 0 : _a.trimEnd()) {\n equipHiddenElement.style.visibility = \"visible\";\n }\n}\n// Show more Locations for task\nexport function moreLocations(i) {\n var _a;\n if (settings.controller.data.ui.limited)\n return;\n var side = dochandler.getSide(i);\n var locationHiddenElement = dochandler.main.get.elc(\"locationHidden\", side);\n if ((_a = locationHiddenElement.innerHTML) === null || _a === void 0 ? void 0 : _a.trimEnd()) {\n locationHiddenElement.style.visibility = \"visible\";\n }\n}\n","// Add commas into a number if its big enough\nexport function numberWithCommas(n) {\n if (n == null)\n return \"Empty\";\n if (n === -666)\n return \"Error\";\n return n.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n// Check if the list contains what you want to find\nexport function listContains(list, find) {\n for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {\n var l = list_1[_i];\n if (decodeHtml(l).toLowerCase() === decodeHtml(find).toLowerCase())\n return true;\n }\n return false;\n}\n// Get new width and height for image based on aspect ratio\nexport function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) {\n var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);\n return { width: srcWidth * ratio, height: srcHeight * ratio };\n}\n// Decode the HTML chars that have been encoded during database downloading\nexport function decodeHtml(html) {\n var txt = document.createElement(\"textarea\");\n txt.innerHTML = html;\n return txt.value;\n}\n","// Private queues and settings\nvar debugQueue = [];\nvar verboseQueue = [];\nvar queueLimit = 50;\nvar debugEnabled = false;\nvar verboseEnabled = false;\n// Set the queue limit for debug and verbose\nexport function setLimit(limit) {\n queueLimit = limit;\n}\n// Enable or disable debug logging\nexport function setDebug(enabled) {\n debugEnabled = enabled;\n if (enabled)\n debug(\"Debug logging enabled\"); // Force Flush the Queue\n}\n// Enable or disable verbose logging\nexport function setVerbose(enabled) {\n verboseEnabled = enabled;\n if (enabled)\n verbose(\"Verbose logging enabled\"); // Force Flush the Queue\n}\n// Public: Log to the normal queue and flush the queue\nexport function log() {\n var messages = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n console.log.apply(console, messages);\n}\n// Public: Log to the warn queue and flush the queue\nexport function warn() {\n var messages = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n console.warn.apply(console, messages);\n}\n// Public: Log to the error queue and flush the queue\nexport function error() {\n var messages = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n console.error.apply(console, messages);\n}\n// Public: Log to the debug queue only if debug is enabled and flush the queue\nexport function debug() {\n var messages = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n debugQueue.push(messages.join(' '));\n trimQueue(debugQueue);\n if (debugEnabled)\n flushQueue(debugQueue, \"Debug\");\n}\n// Public: Log to the verbose queue only if verbose is enabled and flush the queue\nexport function verbose() {\n var messages = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n messages[_i] = arguments[_i];\n }\n verboseQueue.push(messages.join(' '));\n trimQueue(verboseQueue);\n if (verboseEnabled)\n flushQueue(verboseQueue, \"Verbose\");\n}\n// Private: Trim the queue if it exceeds the limit (FIFO: remove first entry)\nfunction trimQueue(queue) {\n if (queue.length > queueLimit)\n queue.shift();\n}\n// Private: Flush and output the entire queue, emptying it afterward\nfunction flushQueue(queue, label) {\n while (queue.length > 0) {\n var message = queue.shift();\n if (label === \"Debug\")\n console.log(\"[\".concat(label, \"] \").concat(message));\n if (label === \"Verbose\")\n console.warn(\"[\".concat(label, \"] \").concat(message));\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as dochandler from \"./dochandler\";\nimport * as slayer from \"./slayer\";\nimport * as main from \"./dochandler/main\";\nimport * as logger from \"./logger\";\n// Define classes\nvar AutoCaptureData = /** @class */ (function () {\n function AutoCaptureData() {\n }\n return AutoCaptureData;\n}());\nexport { AutoCaptureData };\nvar UIData = /** @class */ (function () {\n function UIData() {\n }\n return UIData;\n}());\nexport { UIData };\nvar DefaultData = /** @class */ (function () {\n function DefaultData() {\n }\n return DefaultData;\n}());\nexport { DefaultData };\nvar HiddenData = /** @class */ (function () {\n function HiddenData() {\n }\n return HiddenData;\n}());\nexport { HiddenData };\nvar SettingsData = /** @class */ (function () {\n function SettingsData() {\n }\n return SettingsData;\n}());\nexport { SettingsData };\n// Controls all the settings data\nvar SettingsDataController = /** @class */ (function () {\n function SettingsDataController() {\n this.configLoaded = false;\n this.data = {\n version: 1,\n searchAlgorithim: \"default\",\n autoCapture: {\n enabled: true,\n counter: true,\n search: false,\n loopTimer: 500,\n counterTimer: 500,\n dialogTimer: 5000,\n searchTimer: 10000,\n },\n ui: {\n style: \"default\",\n limited: false,\n status: true,\n counter: false,\n counterTimer: 500,\n historyRetentionCount: 10,\n lookupRetentionCount: 0,\n },\n showHidden: {\n creatures: false,\n eliteCreatures: false,\n dragonkinCreatures: false,\n godWarsCreatures: false,\n ghorrockCreatures: false,\n heartGielinorCreatures: false,\n monsterCreatures: false,\n newVarrockCreatures: false,\n shadowReefCreatures: false,\n strongholdSecurityCreatures: false,\n summonedCreatures: false,\n templeTrekkingCreatures: false,\n unchartedIslesCreatures: false\n },\n default: {\n taskName0: \"waterfiends\",\n taskName1: \"black demons\",\n taskCount0: 777,\n taskCount1: 666\n },\n };\n }\n SettingsDataController.prototype.load = function () {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (window.localStorage.getItem('version') != null) {\n this.data.version = this.decodeVersion(window.localStorage.getItem('version'));\n }\n if (this.data.version <= 5 && !this.configLoaded) {\n logger.log(\"(Versioning System Missing) Setting up versioning system.\");\n window.localStorage.removeItem('recent_task_0');\n window.localStorage.removeItem('recent_task_count_0');\n window.localStorage.removeItem('recent_task_1');\n window.localStorage.removeItem('recent_task_count_1');\n this.save();\n }\n return [4 /*yield*/, fetch(\"./data/version.json\").then(function (r) { return r.json(); })];\n case 1:\n res = _a.sent();\n if (this.data.version < this.decodeVersion(res['version'])) {\n this.data.version = this.decodeVersion(res['version']);\n }\n controller.data.autoCapture.enabled = window.localStorage.getItem(\"auto-capture-enabled\") === \"true\";\n controller.data.autoCapture.counter = window.localStorage.getItem(\"auto-capture-counter\") === \"true\";\n controller.data.autoCapture.search = window.localStorage.getItem(\"auto-capture-search\") === \"true\";\n controller.data.autoCapture.loopTimer = parseInt(window.localStorage.getItem(\"auto-capture-timer-loop\"));\n controller.data.autoCapture.dialogTimer = parseInt(window.localStorage.getItem(\"auto-capture-timer-dialog\"));\n controller.data.autoCapture.counterTimer = parseInt(window.localStorage.getItem(\"auto-capture-timer-counter\"));\n controller.data.autoCapture.searchTimer = parseInt(window.localStorage.getItem(\"auto-capture-timer-search\"));\n controller.data.ui.limited = window.localStorage.getItem(\"ui-limited\") === \"true\";\n controller.data.ui.status = window.localStorage.getItem(\"ui-status\") === \"true\";\n controller.data.ui.counter = window.localStorage.getItem(\"ui-counter\") === \"true\";\n controller.data.ui.counterTimer = parseInt(window.localStorage.getItem(\"ui-counter-timer\"));\n // TODO Load history here then reset the UI and load them\n main.reset.single();\n main.reset.double();\n main.reset.reaper();\n main.reset.suggested();\n if (!(this.data.default.taskName0 != null && this.data.default.taskName1 != null)) return [3 /*break*/, 3];\n return [4 /*yield*/, main.set.double({ name: this.data.default.taskName0, count: this.data.default.taskCount0 }, { name: this.data.default.taskName1, count: this.data.default.taskCount1 })];\n case 2:\n _a.sent();\n return [3 /*break*/, 5];\n case 3:\n if (!(this.data.default.taskName0 != null && this.data.default.taskName1 == null)) return [3 /*break*/, 5];\n return [4 /*yield*/, main.set.single({ name: this.data.default.taskName0, count: this.data.default.taskCount0 })];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5:\n console.warn(\"Config Loaded\");\n this.configLoaded = true;\n return [2 /*return*/];\n }\n });\n });\n };\n SettingsDataController.prototype.save = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (this.data.version > 1) {\n window.localStorage.setItem('version', this.encodeVersion(this.data.version));\n }\n window.localStorage.setItem(\"auto-capture-enabled\", \"\" + controller.data.autoCapture.enabled);\n window.localStorage.setItem(\"auto-capture-counter\", \"\" + controller.data.autoCapture.counter);\n window.localStorage.setItem(\"auto-capture-search\", \"\" + controller.data.autoCapture.search);\n window.localStorage.setItem(\"auto-capture-timer-loop\", \"\" + controller.data.autoCapture.loopTimer);\n window.localStorage.setItem(\"auto-capture-timer-dialog\", \"\" + controller.data.autoCapture.dialogTimer);\n window.localStorage.setItem(\"auto-capture-timer-counter\", \"\" + controller.data.autoCapture.counterTimer);\n window.localStorage.setItem(\"auto-capture-timer-search\", \"\" + controller.data.autoCapture.searchTimer);\n window.localStorage.setItem(\"ui-limited\", \"\" + controller.data.ui.limited);\n window.localStorage.setItem(\"ui-status\", \"\" + controller.data.ui.status);\n window.localStorage.setItem(\"ui-counter\", \"\" + controller.data.ui.counter);\n window.localStorage.setItem(\"ui-counter-timer\", \"\" + controller.data.ui.counterTimer);\n console.warn(\"Config Saved\");\n return [2 /*return*/];\n });\n });\n };\n SettingsDataController.prototype.decodeVersion = function (version) {\n var versionSplit = version.split(\".\");\n var versionUpper = versionSplit.length > 2 ? parseInt(versionSplit[0]) : 0;\n var versionLower = parseInt(versionSplit.length > 2 ? versionSplit[1] : versionSplit[0]);\n var versionPatch = parseInt(versionSplit.length > 2 ? versionSplit[2] : versionSplit[1]);\n return ((versionUpper * 256 * 256) + (versionLower * 256) + versionPatch);\n };\n SettingsDataController.prototype.encodeVersion = function (version) {\n var versionUpper = version > 256 * 256 ? version / (256 * 256) : 0;\n var versionLower = version > 256 ? (version - (versionUpper * 256 * 256)) / 256 : 0;\n var versionPatch = (version - (versionUpper * 256 * 256) - (versionLower * 256));\n return versionUpper + \".\" + versionLower + \".\" + versionPatch;\n };\n return SettingsDataController;\n}());\nexport { SettingsDataController };\nexport var controller = new SettingsDataController();\n// Change history functions\nexport var change;\n(function (change) {\n change.history = [];\n change.index = 0;\n function addHistory(history) {\n if (!history || !history.tasks || !change.history[change.index])\n return;\n if ((history.type === \"single\" || history.type === \"reaper\") &&\n history.tasks[0].name === change.history[change.index].tasks[0].name)\n return;\n if (history.type === \"double\" &&\n history.tasks[0].name === change.history[change.index].tasks[0].name &&\n history.tasks[1].name === change.history[change.index].tasks[1].name)\n return;\n if (history.type === \"suggestion\" && history.type === change.history[change.index].type)\n return;\n if (change.index + 1 != change.history.length) {\n change.history = change.history.slice(0, change.index + 1);\n }\n change.history.push(history);\n change.index = change.history.length - 1;\n console.warn(\"Save History\");\n controller.save();\n }\n change.addHistory = addHistory;\n function refreshCurrent() {\n if (change.index < 0 || change.index >= change.history.length)\n return;\n main.reset.single();\n main.reset.double();\n main.reset.reaper();\n main.reset.suggested();\n var previousChange = change.history[change.index];\n if (previousChange.type === 'double')\n main.set.double(previousChange.tasks[0], previousChange.tasks[1], true);\n if (previousChange.type === 'single')\n main.set.single(previousChange.tasks[0], true);\n if (previousChange.type === 'reaper')\n main.set.reaper(previousChange.tasks[0], true);\n if (previousChange.type === 'suggestion')\n main.set.suggested(true);\n console.warn(\"Save History\");\n controller.save();\n }\n change.refreshCurrent = refreshCurrent;\n function goPreviousHistory() {\n if (change.index - 1 < 0)\n return;\n var previousChange = change.history[--change.index];\n if (previousChange.type === 'double')\n main.set.double(previousChange.tasks[0], previousChange.tasks[1], true);\n if (previousChange.type === 'single')\n main.set.single(previousChange.tasks[0], true);\n if (previousChange.type === 'reaper')\n main.set.reaper(previousChange.tasks[0], true);\n if (previousChange.type === 'suggestion')\n main.set.suggested(true);\n console.warn(\"Save History\");\n controller.save();\n }\n change.goPreviousHistory = goPreviousHistory;\n function goNextHistory() {\n if (change.index + 1 >= change.history.length)\n return;\n var nextChange = change.history[++change.index];\n if (nextChange.type === 'double')\n main.set.double(nextChange.tasks[0], nextChange.tasks[1], true);\n if (nextChange.type === 'single')\n main.set.single(nextChange.tasks[0], true);\n if (nextChange.type === 'reaper')\n main.set.reaper(nextChange.tasks[0], true);\n if (nextChange.type === 'suggestion')\n main.set.suggested(true);\n console.warn(\"Save History\");\n controller.save();\n }\n change.goNextHistory = goNextHistory;\n})(change || (change = {}));\nexport var search;\n(function (search) {\n var temp = null;\n var history = [];\n var index = 0;\n function addHistory(value) {\n if (!value)\n return;\n history.push(value);\n index = history.length;\n temp = null;\n console.warn(\"Save History\");\n controller.save();\n }\n search.addHistory = addHistory;\n function getPreviousHistory() {\n tempValue();\n console.warn(\"Save History\");\n controller.save();\n if (index - 1 < 0)\n return null;\n if (--index === history.length)\n return temp;\n return history[index];\n }\n search.getPreviousHistory = getPreviousHistory;\n function getNextHistory() {\n tempValue();\n console.warn(\"Save History\");\n controller.save();\n if (index + 1 > history.length + (temp === \"\" ? 0 : 1))\n return null;\n if (++index === history.length + (temp === \"\" ? 0 : 1))\n return \"\";\n if (temp !== \"\" && index === history.length)\n return temp;\n return history[index];\n }\n search.getNextHistory = getNextHistory;\n function tempValue() {\n var currentValue = dochandler.main.get.elid(\"search-info\").value;\n if (temp === null)\n temp = currentValue;\n if (index === history.length && temp !== currentValue)\n temp = currentValue;\n if (index === history.length + 1 && currentValue !== \"\") {\n temp = currentValue;\n --index;\n }\n }\n})(search || (search = {}));\nexport function executeDevTools(value) {\n return __awaiter(this, void 0, void 0, function () {\n var counterData, slayerData, a, a, pos, box, _i, _a, _b, index, option, e_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (value === \"devTools\") {\n logger.log(\" ~~~ Dev Tools ~ Information Opened ~~~ \");\n alt1.openBrowser(\"https://runeapps.org/forums/viewtopic.php?id=101\");\n return [2 /*return*/];\n }\n logger.log(\" ~~~ Dev Tools ~ Started ~~~ \");\n _c.label = 1;\n case 1:\n _c.trys.push([1, 10, , 11]);\n if (!(value === \"size\")) return [3 /*break*/, 2];\n logger.log(\"Current Size: \".concat(document.body.clientWidth, \", \").concat(document.body.clientHeight));\n return [3 /*break*/, 9];\n case 2:\n if (!(value === \"debug\")) return [3 /*break*/, 3];\n logger.setDebug(true);\n return [3 /*break*/, 9];\n case 3:\n if (!(value === \"verbose\")) return [3 /*break*/, 4];\n logger.setVerbose(true);\n return [3 /*break*/, 9];\n case 4:\n if (!(value === \"counterReader\")) return [3 /*break*/, 6];\n return [4 /*yield*/, slayer.counterReader.read()];\n case 5:\n counterData = _c.sent();\n if (counterData) {\n logger.log(\"The Counter UI Collapsed [\".concat(counterData.collapsed, \"]\"));\n logger.log(\"The Counter UI Old School [\".concat(counterData.OS, \"]\"));\n logger.log(\"The Counter UI Reaper [\".concat(counterData.reaper, \"]\"));\n logger.log(\"The Counter UI Count [\".concat(counterData.count, \"]\"));\n logger.log(\"The Counter UI Task [\".concat(counterData.task, \"]\"));\n }\n else {\n logger.log(\" ~~~ Dev Tools ~ Error: Cannot read counter data! ~~~ \");\n }\n return [3 /*break*/, 9];\n case 6:\n if (!(value === \"slayerReader\")) return [3 /*break*/, 8];\n return [4 /*yield*/, slayer.slayerReader.read()];\n case 7:\n slayerData = _c.sent();\n if (slayerData) {\n logger.log(\"The Slayer Reader Select Your Own [\".concat(slayerData.selectYourOwn, \"]\"));\n logger.log(\"The Slayer Reader Reaper [\".concat(slayerData.reaper, \"]\"));\n logger.log(\"The Slayer Reader Ticket [\".concat(slayerData.ticket, \"]\"));\n for (a in slayerData.count) {\n logger.log(\"The Slayer Reader Count{\".concat(a, \"} [\").concat(slayerData.count[a], \"]\"));\n }\n for (a in slayerData.task) {\n logger.log(\"The Slayer Reader Task{\".concat(a, \"} [\").concat(slayerData.task[a], \"]\"));\n }\n }\n else {\n logger.log(\" ~~~ Dev Tools ~ Error: Cannot read slayer data! ~~~ \");\n }\n return [3 /*break*/, 9];\n case 8:\n if (value === \"dialogReader\") {\n logger.log(\"Searching for Dialog...\");\n pos = slayer.slayerReader.dialogReader.find();\n if (!pos) {\n logger.log(\" ~~~ Dev Tools ~ Error: Cannot find the Dialog! ~~~ \");\n return [2 /*return*/];\n }\n box = slayer.slayerReader.dialogReader.read();\n if (!box) {\n logger.log(\" ~~~ Dev Tools ~ Error: Cannot read the Dialog! ~~~ \");\n return [2 /*return*/];\n }\n if (box.title)\n logger.log(\"The Dialog Box Title [\".concat(box.title, \"]\"));\n if (box.text)\n logger.log(\"The Dialog Box Text [\".concat(box.text, \"]\"));\n if (box.opts) {\n logger.log(\"The Dialog Box Options (\".concat(box.opts.length, \") [\").concat(box.opts, \"]\"));\n for (_i = 0, _a = box.opts.entries(); _i < _a.length; _i++) {\n _b = _a[_i], index = _b[0], option = _b[1];\n logger.log(\"\\t\".concat(index + 1, \". \").concat(option.text));\n }\n }\n }\n _c.label = 9;\n case 9: return [3 /*break*/, 11];\n case 10:\n e_1 = _c.sent();\n console.error(\"~~~ Dev Tools ~ Error: Issue Capturing Screen! ~~~ \");\n return [3 /*break*/, 11];\n case 11:\n logger.log(\" ~~~ Dev Tools ~ Finished ~~~ \");\n return [2 /*return*/];\n }\n });\n });\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as a1lib from \"alt1\";\nimport { SearchAlgorithm } from './SearchAlgorithm';\nimport { SlayerDialogReader } from './SlayerDialogReader';\nimport { UICounterReader } from './UICounterReader';\nimport * as settings from './settings';\nimport * as docHandler from './dochandler';\nimport * as logger from \"./logger\";\n// Setup the readers and search algo\nexport var searchAlgo = new SearchAlgorithm();\nexport var slayerReader = new SlayerDialogReader();\nexport var counterReader = new UICounterReader();\nexport var searchResult = false;\n// Get a timer and setup vars\nvar timer = function (ms) { return new Promise(function (res) { return setTimeout(res, ms); }); };\nvar loopRunning = false;\n// Check if we can capture the screen\nexport function canCaptureRunescape() {\n return window.alt1 && alt1.rsLinked && alt1.permissionPixel;\n}\n// Capture the screen\nexport function captureRunescape() {\n if (!canCaptureRunescape())\n return null;\n try {\n return a1lib.captureHoldFullRs();\n }\n catch (ex) {\n if (ex.message === \"capturehold failed\")\n console.warn(\"Capturing screen failed! Is runescape open?\");\n }\n return null;\n}\n// Find a task on the current screen\nexport function findTask(buffer) {\n return __awaiter(this, void 0, void 0, function () {\n var slayerData, counterData;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!settings.controller.data.autoCapture.enabled || loopRunning || searchResult)\n return [2 /*return*/];\n if (!buffer)\n buffer = captureRunescape();\n if (!buffer)\n return [2 /*return*/];\n loopRunning = true;\n docHandler.animate.loadingStop();\n return [4 /*yield*/, slayerReader.read(buffer)];\n case 1:\n slayerData = _a.sent();\n if (!(slayerData && slayerData[0])) return [3 /*break*/, 11];\n docHandler.animate.loading();\n if (!slayerData.selectYourOwn) return [3 /*break*/, 3];\n docHandler.main.set.suggested();\n docHandler.animate.loadingStop();\n return [4 /*yield*/, timer(settings.controller.data.autoCapture.dialogTimer)];\n case 2:\n _a.sent();\n loopRunning = false;\n return [2 /*return*/];\n case 3:\n if (!(slayerData.reaper && !slayerData.ticket)) return [3 /*break*/, 5];\n return [4 /*yield*/, docHandler.main.set.reaper({ name: slayerData[0].task, count: slayerData[0].count })];\n case 4:\n _a.sent();\n return [3 /*break*/, 9];\n case 5:\n if (!slayerData.ticket) return [3 /*break*/, 7];\n return [4 /*yield*/, docHandler.main.set.double({ name: slayerData[0].task, count: slayerData[0].count }, { name: slayerData[1].task, count: slayerData[1].count })];\n case 6:\n _a.sent();\n return [3 /*break*/, 9];\n case 7: return [4 /*yield*/, docHandler.main.set.single({ name: slayerData[0].task, count: slayerData[0].count })];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n docHandler.animate.loadingStop();\n return [4 /*yield*/, timer(settings.controller.data.autoCapture.dialogTimer)];\n case 10:\n _a.sent();\n loopRunning = false;\n return [3 /*break*/, 21];\n case 11:\n if (!settings.controller.data.autoCapture.counter) return [3 /*break*/, 20];\n return [4 /*yield*/, counterReader.read(buffer)];\n case 12:\n counterData = _a.sent();\n if (!counterData) return [3 /*break*/, 18];\n docHandler.animate.loading();\n if (!(counterData.reaper && (docHandler.main.reaperLoaded || counterData.task != null))) return [3 /*break*/, 14];\n return [4 /*yield*/, docHandler.main.set.reaper({ name: counterData.task, count: counterData.count })];\n case 13:\n _a.sent();\n return [3 /*break*/, 16];\n case 14:\n if (!(!counterData.reaper && (docHandler.main.singleLoaded || counterData.task != null))) return [3 /*break*/, 16];\n return [4 /*yield*/, docHandler.main.set.single({ name: counterData.task, count: counterData.count })];\n case 15:\n _a.sent();\n _a.label = 16;\n case 16:\n docHandler.animate.loadingStop();\n return [4 /*yield*/, timer(settings.controller.data.autoCapture.counterTimer)];\n case 17:\n _a.sent();\n loopRunning = false;\n return [3 /*break*/, 19];\n case 18:\n docHandler.animate.loadingStop();\n loopRunning = false;\n _a.label = 19;\n case 19: return [3 /*break*/, 21];\n case 20:\n docHandler.animate.loadingStop();\n loopRunning = false;\n _a.label = 21;\n case 21: return [2 /*return*/];\n }\n });\n });\n}\n// Search for tasks\nexport function searchTasks(value) {\n return __awaiter(this, void 0, void 0, function () {\n var tool, lookup, tasks, _i, lookup_1, term, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!value) return [3 /*break*/, 2];\n return [4 /*yield*/, docHandler.main.get.searchInput()];\n case 1:\n value = _a.sent();\n _a.label = 2;\n case 2:\n docHandler.main.reset.searchBox();\n settings.search.addHistory(value);\n if (!(value.length == 0 && (searchResult || !settings.controller.data.autoCapture.enabled))) return [3 /*break*/, 4];\n searchResult = false;\n docHandler.main.toggle.searchText();\n return [4 /*yield*/, findTask()];\n case 3:\n _a.sent();\n return [2 /*return*/];\n case 4:\n if (value.startsWith(\"devTools\")) {\n tool = value.includes(\" \") ? value.substring(value.indexOf(\" \") + 1) : value;\n settings.executeDevTools(tool);\n return [2 /*return*/];\n }\n else if (value.toLowerCase().includes(\"suggest\")) {\n docHandler.main.set.suggested();\n return [2 /*return*/];\n }\n _a.label = 5;\n case 5:\n searchResult = true;\n docHandler.main.toggle.searchText();\n lookup = value.includes(\"|\") ?\n [value.substring(0, value.indexOf(\"|\")), value.substring(value.indexOf(\"|\") + 1)] :\n [value];\n tasks = [];\n _i = 0, lookup_1 = lookup;\n _a.label = 6;\n case 6:\n if (!(_i < lookup_1.length)) return [3 /*break*/, 9];\n term = lookup_1[_i];\n return [4 /*yield*/, searchAlgo.lookup(term, lookup.length > 1)];\n case 7:\n data = _a.sent();\n if (data) {\n logger.log(\"Search for (Reaper/Slayer Assignment, Alias, or Creature): \" + data.task);\n tasks.push({ name: data.task, reaper: data.reaper });\n }\n _a.label = 8;\n case 8:\n _i++;\n return [3 /*break*/, 6];\n case 9:\n if (!(tasks.length > 1)) return [3 /*break*/, 11];\n return [4 /*yield*/, docHandler.main.set.double({ name: tasks[0].name, count: 1 }, { name: tasks[1].name, count: 1 })];\n case 10:\n _a.sent();\n return [3 /*break*/, 15];\n case 11:\n if (!(tasks.length == 1)) return [3 /*break*/, 15];\n if (!tasks[0].reaper) return [3 /*break*/, 13];\n return [4 /*yield*/, docHandler.main.set.reaper({ name: tasks[0].name, count: 1 })];\n case 12:\n _a.sent();\n return [3 /*break*/, 15];\n case 13: return [4 /*yield*/, docHandler.main.set.single({ name: tasks[0].name, count: 1 })];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15:\n docHandler.animate.loadingStop();\n if (!!settings.controller.data.autoCapture.search) return [3 /*break*/, 17];\n return [4 /*yield*/, timer(settings.controller.data.autoCapture.searchTimer)];\n case 16:\n _a.sent();\n searchResult = false;\n docHandler.main.toggle.searchText();\n _a.label = 17;\n case 17: return [2 /*return*/];\n }\n });\n });\n}\n","if(typeof __WEBPACK_EXTERNAL_MODULE_canvas__ === 'undefined') { var e = new Error(\"Cannot find module 'canvas'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_canvas__;","if(typeof __WEBPACK_EXTERNAL_MODULE_electron_common__ === 'undefined') { var e = new Error(\"Cannot find module 'electron/common'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_electron_common__;","if(typeof __WEBPACK_EXTERNAL_MODULE_sharp__ === 'undefined') { var e = new Error(\"Cannot find module 'sharp'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_sharp__;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory((function webpackLoadOptionalExternalModule() { try { return require(\"sharp\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"canvas\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"electron/common\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"sharp\", \"canvas\", \"electron/common\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"base\"] = factory((function webpackLoadOptionalExternalModule() { try { return require(\"sharp\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"canvas\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"electron/common\"); } catch(e) {} }()));\n\telse\n\t\troot[\"A1lib\"] = factory(root[\"sharp\"], root[\"canvas\"], root[\"electron/common\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE_sharp__, __WEBPACK_EXTERNAL_MODULE_canvas__, __WEBPACK_EXTERNAL_MODULE_electron_common__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/base/alt1api.ts\":\n/*!*****************************!*\\\n !*** ./src/base/alt1api.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n\n\n/***/ }),\n\n/***/ \"./src/base/declarations.ts\":\n/*!**********************************!*\\\n !*** ./src/base/declarations.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n\n\n/***/ }),\n\n/***/ \"./src/base/imagedata-extensions.ts\":\n/*!******************************************!*\\\n !*** ./src/base/imagedata-extensions.ts ***!\n \\******************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ImageData = void 0;\nconst a1lib = __importStar(__webpack_require__(/*! ./index */ \"./src/base/index.ts\"));\nconst nodeimports = __importStar(__webpack_require__(/*! ./nodepolyfill */ \"./src/base/nodepolyfill.ts\"));\n// //TODO revamp this madness a bit?\n// (function () {\n// \tvar globalvar = (typeof self != \"undefined\" ? self : (typeof (global as any) != \"undefined\" ? (global as any) : null)) as any;\n// \t//use the node-canvas version when on node\n// \tif (typeof globalvar.ImageData == \"undefined\") {\n// \t\tlet nodecnv = requireNodeCanvas();\n// \t\tglobalvar.ImageData = nodecnv.ImageData;\n// \t}\n// \tvar fill = typeof globalvar.ImageData == \"undefined\";\n// \t//should never be reach anymore\n// \tvar constr = function (this: any) {\n// \t\tvar i = 0;\n// \t\tvar data = (arguments[i] instanceof Uint8ClampedArray ? arguments[i++] : null);\n// \t\tvar width = arguments[i++];\n// \t\tvar height = arguments[i++];\n// \t\tif (fill) {\n// \t\t\tif (!data) { data = new Uint8ClampedArray(width * height * 4); }\n// \t\t\tthis.width = width;\n// \t\t\tthis.height = height;\n// \t\t\tthis.data = data;\n// \t\t}\n// \t\telse if (oldconstr) {\n// \t\t\treturn (data ? new oldconstr(data, width, height) : new oldconstr(width, height));\n// \t\t} else {\n// \t\t\tvar canvas = document.createElement('canvas');\n// \t\t\tcanvas.width = width;\n// \t\t\tcanvas.height = height;\n// \t\t\tvar ctx = canvas.getContext(\"2d\")!;\n// \t\t\tvar imageData = ctx.createImageData(width, height);\n// \t\t\tif (data) { imageData.data.set(data); }\n// \t\t\treturn imageData;\n// \t\t}\n// \t}\n// \tvar oldconstr = globalvar.ImageData;\n// \tif (typeof document != \"undefined\") {\n// \t\ttry {\n// \t\t\tnew oldconstr(1, 1);\n// \t\t} catch (e) {\n// \t\t\t//direct constructor call not allowed in ie\n// \t\t\toldconstr = null;\n// \t\t}\n// \t}\n// \tif (!fill) { constr.prototype = globalvar.ImageData.prototype; }\n// \tglobalvar.ImageData = constr;\n// \tImageData = constr as any;\n// })();\n(function () {\n var globalvar = (typeof self != \"undefined\" ? self : (typeof __webpack_require__.g != \"undefined\" ? __webpack_require__.g : null));\n var filltype = typeof globalvar.ImageData == \"undefined\" || typeof globalvar.document == \"undefined\";\n var fillconstr = filltype;\n if (!filltype) {\n var oldconstr = globalvar.ImageData;\n try {\n let data = new Uint8ClampedArray(4);\n data[0] = 1;\n let a = new globalvar.ImageData(data, 1, 1);\n fillconstr = a.data[0] != 1;\n }\n catch (e) {\n fillconstr = true;\n }\n }\n if (fillconstr) {\n var constr = function ImageDataShim() {\n var i = 0;\n var data = (arguments[i] instanceof Uint8ClampedArray ? arguments[i++] : null);\n var width = arguments[i++];\n var height = arguments[i++];\n if (filltype) {\n if (!data) {\n data = new Uint8ClampedArray(width * height * 4);\n }\n this.width = width;\n this.height = height;\n this.data = data;\n }\n else if (fillconstr) {\n //WARNING This branch of code does not use the same pixel data backing store\n //(problem with wasm, however all wasm browser have a native constructor (unless asm.js is used))\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n var ctx = canvas.getContext(\"2d\");\n var imageData = ctx.createImageData(width, height);\n if (data) {\n imageData.data.set(data);\n }\n return imageData;\n }\n // else {\n // \t//oh no...\n // \t//we need this monstrocity in order to call the native constructor with variable number of args\n // \t//when es5 transpile is enable (that strips the spread operator)\n // \treturn new (Function.prototype.bind.apply(oldconstr, [null,...arguments]));\n // }\n };\n if (!filltype) {\n constr.prototype = globalvar.ImageData.prototype;\n }\n globalvar.ImageData = constr;\n exports.ImageData = constr;\n }\n else {\n exports.ImageData = globalvar.ImageData;\n }\n})();\n//Recast into a drawable imagedata class on all platforms, into a normal browser ImageData on browsers or a node-canvas imagedata on nodejs\nexports.ImageData.prototype.toDrawableData = function () {\n if (typeof document == \"undefined\") {\n return nodeimports.imageDataToDrawable(this);\n }\n else {\n return this;\n }\n};\nexports.ImageData.prototype.putImageData = function (buf, cx, cy) {\n for (var dx = 0; dx < buf.width; dx++) {\n for (var dy = 0; dy < buf.height; dy++) {\n var i1 = (dx + cx) * 4 + (dy + cy) * 4 * this.width;\n var i2 = dx * 4 + dy * 4 * buf.width;\n this.data[i1] = buf.data[i2];\n this.data[i1 + 1] = buf.data[i2 + 1];\n this.data[i1 + 2] = buf.data[i2 + 2];\n this.data[i1 + 3] = buf.data[i2 + 3];\n }\n }\n};\nexports.ImageData.prototype.pixelOffset = function (x, y) {\n return x * 4 + y * this.width * 4;\n};\n//creates a hash of a portion of the buffer used to check for changes\nexports.ImageData.prototype.getPixelHash = function (rect) {\n if (!rect) {\n rect = new a1lib.Rect(0, 0, this.width, this.height);\n }\n var hash = 0;\n for (var x = rect.x; x < rect.x + rect.width; x++) {\n for (var y = rect.y; y < rect.y + rect.height; y++) {\n var i = x * 4 + y * 4 * this.width;\n hash = (((hash << 5) - hash) + this.data[i]) | 0;\n hash = (((hash << 5) - hash) + this.data[i + 1]) | 0;\n hash = (((hash << 5) - hash) + this.data[i + 2]) | 0;\n hash = (((hash << 5) - hash) + this.data[i + 3]) | 0;\n }\n }\n return hash;\n};\nexports.ImageData.prototype.clone = function (rect) {\n return this.toImage(rect).getContext(\"2d\").getImageData(0, 0, rect.width, rect.height);\n};\nexports.ImageData.prototype.show = function (x = 5, y = 5, zoom = 1) {\n if (typeof document == \"undefined\") {\n console.error(\"need a document to show an imagedata object\");\n return;\n }\n var imgs = document.getElementsByClassName(\"debugimage\");\n while (imgs.length > exports.ImageData.prototype.show.maxImages) {\n imgs[0].remove();\n }\n var el = this.toImage();\n el.classList.add(\"debugimage\");\n el.style.position = \"absolute\";\n el.style.zIndex = \"1000\";\n el.style.left = x / zoom + \"px\";\n el.style.top = y / zoom + \"px\";\n el.style.background = \"purple\";\n el.style.cursor = \"pointer\";\n el.style.imageRendering = \"pixelated\";\n el.style.outline = \"1px solid #0f0\";\n el.style.width = (this.width == 1 ? 100 : this.width) * zoom + \"px\";\n el.style.height = (this.height == 1 ? 100 : this.height) * zoom + \"px\";\n el.onclick = function () { el.remove(); };\n document.body.appendChild(el);\n return el;\n};\nexports.ImageData.prototype.show.maxImages = 10;\nexports.ImageData.prototype.toImage = function (rect) {\n if (!rect) {\n rect = new a1lib.Rect(0, 0, this.width, this.height);\n }\n if (typeof document != \"undefined\") {\n var el = document.createElement(\"canvas\");\n el.width = rect.width;\n el.height = rect.height;\n }\n else {\n el = nodeimports.createCanvas(rect.width, rect.height);\n }\n var ctx = el.getContext(\"2d\");\n ctx.putImageData(this.toDrawableData(), -rect.x, -rect.y);\n return el;\n};\nexports.ImageData.prototype.getPixel = function (x, y) {\n var i = x * 4 + y * 4 * this.width;\n return [this.data[i], this.data[i + 1], this.data[i + 2], this.data[i + 3]];\n};\nexports.ImageData.prototype.getPixelValueSum = function (x, y) {\n var i = x * 4 + y * 4 * this.width;\n return this.data[i] + this.data[i + 1] + this.data[i + 2];\n};\nexports.ImageData.prototype.getPixelInt = function (x, y) {\n var i = x * 4 + y * 4 * this.width;\n return (this.data[i + 3] << 24) + (this.data[i + 0] << 16) + (this.data[i + 1] << 8) + (this.data[i + 2] << 0);\n};\nexports.ImageData.prototype.getColorDifference = function (x, y, r, g, b, a = 255) {\n var i = x * 4 + y * 4 * this.width;\n return Math.abs(this.data[i] - r) + Math.abs(this.data[i + 1] - g) + Math.abs(this.data[i + 2] - b) * a / 255;\n};\nexports.ImageData.prototype.setPixel = function (x, y, ...color) {\n var r, g, b, a;\n var [r, g, b, a] = (Array.isArray(color[0]) ? color[0] : color);\n var i = x * 4 + y * 4 * this.width;\n this.data[i] = r;\n this.data[i + 1] = g;\n this.data[i + 2] = b;\n this.data[i + 3] = a == undefined ? 255 : a;\n};\nexports.ImageData.prototype.setPixelInt = function (x, y, color) {\n var i = x * 4 + y * 4 * this.width;\n this.data[i] = (color >> 24) & 0xff;\n this.data[i + 1] = (color >> 16) & 0xff;\n this.data[i + 2] = (color >> 8) & 0xff;\n this.data[i + 3] = (color >> 0) & 0xff;\n};\nexports.ImageData.prototype.toFileBytes = function (format, quality) {\n if (typeof HTMLCanvasElement != \"undefined\") {\n return new Promise(d => this.toImage().toBlob(b => {\n var r = new FileReader();\n r.readAsArrayBuffer(b);\n r.onload = () => d(new Uint8Array(r.result));\n }, format, quality));\n }\n else {\n return nodeimports.imageDataToFileBytes(this, format, quality);\n }\n};\nexports.ImageData.prototype.toPngBase64 = function () {\n if (typeof HTMLCanvasElement != \"undefined\") {\n var str = this.toImage().toDataURL(\"image/png\");\n return str.slice(str.indexOf(\",\") + 1);\n }\n else {\n throw new Error(\"synchronous image conversion not supported in nodejs, try using ImageData.prototype.toFileBytes\");\n }\n};\nexports.ImageData.prototype.pixelCompare = function (buf, x = 0, y = 0, max) {\n return a1lib.ImageDetect.simpleCompare(this, buf, x, y, max);\n};\nexports.ImageData.prototype.copyTo = function (target, sourcex, sourcey, width, height, targetx, targety) {\n //convince v8 that these are 31bit uints\n const targetwidth = target.width | 0;\n const thiswidth = this.width | 0;\n const copywidth = width | 0;\n const fastwidth = Math.floor(width / 4) * 4;\n const thisdata = new Int32Array(this.data.buffer, this.data.byteOffset, this.data.byteLength / 4);\n const targetdata = new Int32Array(target.data.buffer, target.data.byteOffset, target.data.byteLength / 4);\n for (let cy = 0; cy < height; cy++) {\n let cx = 0;\n let it = (cx + targetx) + (cy + targety) * targetwidth;\n let is = (cx + sourcex) + (cy + sourcey) * thiswidth;\n //copy 4 pixels per iter (xmm)\n for (; cx < fastwidth; cx += 4) {\n targetdata[it] = thisdata[is];\n targetdata[it + 1] = thisdata[is + 1];\n targetdata[it + 2] = thisdata[is + 2];\n targetdata[it + 3] = thisdata[is + 3];\n it += 4;\n is += 4;\n }\n //copy remainder per pixel\n for (; cx < copywidth; cx++) {\n targetdata[it] = thisdata[is];\n it += 1;\n is += 1;\n }\n }\n};\nif (typeof HTMLImageElement != \"undefined\") {\n HTMLImageElement.prototype.toBuffer = function (x = 0, y = 0, w = this.width, h = this.height) {\n var cnv = document.createElement(\"canvas\");\n cnv.width = w;\n cnv.height = h;\n var ctx = cnv.getContext(\"2d\");\n ctx.drawImage(this, -x, -y);\n return ctx.getImageData(0, 0, w, h);\n };\n HTMLImageElement.prototype.toCanvas = function (x = 0, y = 0, w = this.width, h = this.height) {\n var cnv = document.createElement(\"canvas\");\n cnv.width = w;\n cnv.height = h;\n var ctx = cnv.getContext(\"2d\");\n ctx.drawImage(this, -x, -y);\n return cnv;\n };\n}\n\n\n/***/ }),\n\n/***/ \"./src/base/imagedetect.ts\":\n/*!*********************************!*\\\n !*** ./src/base/imagedetect.ts ***!\n \\*********************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ImageDataSet = exports.webpackImages = exports.asyncMap = exports.coldif = exports.simpleCompareRMSE = exports.simpleCompare = exports.findSubbuffer = exports.findSubimage = exports.clearPngColorspace = exports.isPngBuffer = exports.imageDataFromFileBuffer = exports.imageDataFromBase64 = exports.imageDataFromUrl = void 0;\nconst imgref_1 = __webpack_require__(/*! ./imgref */ \"./src/base/imgref.ts\");\nconst wapper = __importStar(__webpack_require__(/*! ./wrapper */ \"./src/base/wrapper.ts\"));\nconst nodeimports = __importStar(__webpack_require__(/*! ./nodepolyfill */ \"./src/base/nodepolyfill.ts\"));\nconst _1 = __webpack_require__(/*! . */ \"./src/base/index.ts\");\n/**\n* Downloads an image and returns the ImageData\n* Make sure the png image does not have a sRGB chunk or the resulting pixels will differ for different users!!!\n* @param url http(s) or data url to the image\n*/\nasync function imageDataFromUrl(url) {\n if (typeof Image != \"undefined\") {\n var img = new Image();\n img.crossOrigin = \"crossorigin\";\n return await new Promise((done, fail) => {\n img.onload = function () { done(img.toBuffer()); };\n img.onerror = fail;\n img.src = url;\n });\n }\n else {\n var hdr = \"data:image/png;base64,\";\n if (url.startsWith(hdr)) {\n return imageDataFromBase64(url.slice(hdr.length));\n }\n throw new Error(\"loading remote images in nodejs has been disabled, load the raw bytes and use imageDataFromNodeBuffer instead\");\n }\n}\nexports.imageDataFromUrl = imageDataFromUrl;\n/**\n* Loads an ImageData object from a base64 encoded png image\n* Make sure the png image does not have a sRGB chunk or the resulting pixels will differ for different users!!!\n* @param data a base64 encoded png image\n*/\nasync function imageDataFromBase64(data) {\n if (typeof Image != \"undefined\") {\n return imageDataFromUrl(\"data:image/png;base64,\" + data);\n }\n else {\n return nodeimports.imageDataFromBase64(data);\n }\n}\nexports.imageDataFromBase64 = imageDataFromBase64;\n/**\n * Loads an ImageData object directly from a png encoded file buffer\n * This method ensures that png color space headers are taken care off\n * @param data The bytes of a png file\n */\nasync function imageDataFromFileBuffer(data) {\n clearPngColorspace(data);\n if (typeof Image != \"undefined\") {\n let blob = new Blob([data], { type: \"image/png\" });\n let url = URL.createObjectURL(blob);\n let r = await imageDataFromUrl(url);\n URL.revokeObjectURL(url);\n return r;\n }\n else {\n return nodeimports.imageDataFromBuffer(data);\n }\n}\nexports.imageDataFromFileBuffer = imageDataFromFileBuffer;\n/**\n* Checks if a given byte array is a png file (by checking for ?PNG as first 4 bytes)\n* @param bytes Raw bytes of the png file\n*/\nfunction isPngBuffer(bytes) {\n return bytes[0] == 137 && bytes[1] == 80 && bytes[2] == 78 && bytes[3] == 71;\n}\nexports.isPngBuffer = isPngBuffer;\n/**\n* Resets the colorspace data in the png file.\n* This makes sure the browser renders the exact colors in the file instead of filtering it in order to obtain the best real life representation of\n* what it looked like on the authors screen. (this feature is often broken and not supported)\n* For example a round trip printscreen -> open in browser results in different colors than the original\n* @param data Raw bytes of the png file\n*/\nfunction clearPngColorspace(data) {\n if (!isPngBuffer(data)) {\n throw new Error(\"non-png image received\");\n }\n var i = 8;\n while (i < data.length) {\n var length = data[i++] * 0x1000000 + data[i++] * 0x10000 + data[i++] * 0x100 + data[i++];\n var ancillary = !!((data[i] >> 5) & 1);\n var chunkname = String.fromCharCode(data[i], data[i + 1], data[i + 2], data[i + 3]);\n var chunkid = chunkname.toLowerCase();\n if (chunkid != \"trns\" && ancillary) {\n data[i + 0] = \"n\".charCodeAt(0);\n data[i + 1] = \"o\".charCodeAt(0);\n data[i + 2] = \"P\".charCodeAt(0);\n data[i + 3] = \"E\".charCodeAt(0);\n //calculate new chunk checksum\n //http://www.libpng.org/pub/png/spec/1.2/PNG-CRCAppendix.html\n var end = i + 4 + length;\n var crc = 0xffffffff;\n //should be fast enough like this\n var bitcrc = function (bit) {\n for (var k = 0; k < 8; k++) {\n if (bit & 1) {\n bit = 0xedb88320 ^ (bit >>> 1);\n }\n else {\n bit = bit >>> 1;\n }\n }\n return bit;\n };\n for (var a = i; a < end; a++) {\n if (a >= i + 4) {\n data[a] = 0;\n }\n var bit = data[a];\n crc = bitcrc((crc ^ bit) & 0xff) ^ (crc >>> 8);\n }\n crc = crc ^ 0xffffffff;\n //new chunk checksum\n data[i + 4 + length + 0] = (crc >> 24) & 0xff;\n data[i + 4 + length + 1] = (crc >> 16) & 0xff;\n data[i + 4 + length + 2] = (crc >> 8) & 0xff;\n data[i + 4 + length + 3] = (crc >> 0) & 0xff;\n }\n if (chunkname == \"IEND\") {\n break;\n }\n i += 4; //type\n i += length; //data\n i += 4; //crc\n }\n}\nexports.clearPngColorspace = clearPngColorspace;\n/**\n* finds the given needle ImageBuffer in the given haystack ImgRef this function uses the best optimized available\n* code depending on the type of the haystack. It will use fast c# searching if the haystack is an ImgRefBind, js searching\n* is used otherwise.\n* the checklist argument is no longer used and should ignored or null/undefined\n* The optional sx,sy,sw,sh arguments indicate a bounding rectangle in which to search the needle. The rectangle should be bigger than the needle\n* @returns An array of points where the needle is found. The array is empty if none are found\n*/\nfunction findSubimage(haystackImgref, needleBuffer, sx = 0, sy = 0, sw = haystackImgref.width, sh = haystackImgref.height) {\n if (!haystackImgref) {\n throw new TypeError();\n }\n if (!needleBuffer) {\n throw new TypeError();\n }\n var max = 30;\n //check if we can do this in alt1\n if (haystackImgref instanceof imgref_1.ImgRefBind && wapper.hasAlt1 && alt1.bindFindSubImg) {\n var needlestr = wapper.encodeImageString(needleBuffer);\n var r = alt1.bindFindSubImg(haystackImgref.handle, needlestr, needleBuffer.width, sx, sy, sw, sh);\n if (!r) {\n throw new wapper.Alt1Error();\n }\n return JSON.parse(r);\n }\n return findSubbuffer(haystackImgref.read(), needleBuffer, sx, sy, sw, sh);\n}\nexports.findSubimage = findSubimage;\n/**\n* Uses js to find the given needle ImageBuffer in the given haystack ImageBuffer. It is better to use the alt1.bind- functions in\n* combination with a1nxt.findsubimg.\n* the optional sx,sy,sw,sh arguments indicate a bounding rectangle in which to search.\n* @returns An array of points where the needle is found. The array is empty if none are found\n*/\nfunction findSubbuffer(haystack, needle, sx = 0, sy = 0, sw = haystack.width, sh = haystack.height) {\n var r = [];\n var maxdif = 30;\n var maxresults = 50;\n var needlestride = needle.width * 4;\n var heystackstride = haystack.width * 4;\n //built list of non trans pixel to check\n var checkList = [];\n for (var y = 0; y < needle.height; y++) {\n for (var x = 0; x < needle.width; x++) {\n var i = x * 4 + y * needlestride;\n if (needle.data[i + 3] == 255) {\n checkList.push({ x: x, y: y });\n }\n if (checkList.length == 10) {\n break;\n }\n }\n if (checkList.length == 10) {\n break;\n }\n }\n var cw = (sx + sw) - needle.width;\n var ch = (sy + sh) - needle.height;\n var checklength = checkList.length;\n for (var y = sy; y <= ch; y++) {\n outer: for (var x = sx; x <= cw; x++) {\n for (var a = 0; a < checklength; a++) {\n var i1 = (x + checkList[a].x) * 4 + (y + checkList[a].y) * heystackstride;\n var i2 = checkList[a].x * 4 + checkList[a].y * needlestride;\n var d = 0;\n d = d + Math.abs(haystack.data[i1 + 0] - needle.data[i2 + 0]) | 0;\n d = d + Math.abs(haystack.data[i1 + 1] - needle.data[i2 + 1]) | 0;\n d = d + Math.abs(haystack.data[i1 + 2] - needle.data[i2 + 2]) | 0;\n d *= 255 / needle.data[i2 + 3];\n if (d > maxdif) {\n continue outer;\n }\n }\n if (simpleCompare(haystack, needle, x, y, maxdif) != Infinity) {\n r.push({ x, y });\n if (r.length > maxresults) {\n return r;\n }\n }\n }\n }\n return r;\n}\nexports.findSubbuffer = findSubbuffer;\n/**\n* Compares two images and returns the average color difference per pixel between them\n* @param max The max color difference at any point in the image before short circuiting the function and returning Infinity. set to -1 to always continue.\n* @returns The average color difference per pixel or Infinity if the difference is more than max at any point in the image\n*/\nfunction simpleCompare(bigbuf, checkbuf, x, y, max = 30) {\n if (x < 0 || y < 0) {\n throw new RangeError();\n }\n if (x + checkbuf.width > bigbuf.width || y + checkbuf.height > bigbuf.height) {\n throw new RangeError();\n }\n if (max == -1) {\n max = 255 * 4;\n }\n var dif = 0;\n for (var step = 8; step >= 1; step /= 2) {\n for (var cx = 0; cx < checkbuf.width; cx += step) {\n for (var cy = 0; cy < checkbuf.height; cy += step) {\n var i1 = (x + cx) * 4 + (y + cy) * bigbuf.width * 4;\n var i2 = cx * 4 + cy * checkbuf.width * 4;\n var d = 0;\n d = d + Math.abs(bigbuf.data[i1 + 0] - checkbuf.data[i2 + 0]) | 0;\n d = d + Math.abs(bigbuf.data[i1 + 1] - checkbuf.data[i2 + 1]) | 0;\n d = d + Math.abs(bigbuf.data[i1 + 2] - checkbuf.data[i2 + 2]) | 0;\n d *= checkbuf.data[i2 + 3] / 255;\n if (step == 1) {\n dif += d;\n }\n if (d > max) {\n return Infinity;\n }\n }\n }\n }\n return dif / checkbuf.width / checkbuf.height;\n}\nexports.simpleCompare = simpleCompare;\n/**\n* Calculates the root mean square error between the two buffers at the given coordinate, this method can be used in situations with significant blur or\n* transparency, it does not bail early on non-matching images like simpleCompare does so it can be expected to be much slower when called often.\n* @returns The root mean square error beteen the images, high single pixel errors are penalized more than consisten low errors. return of 0 means perfect match.\n*/\nfunction simpleCompareRMSE(bigbuf, checkbuf, x, y) {\n if (x < 0 || y < 0) {\n throw new RangeError();\n }\n if (x + checkbuf.width > bigbuf.width || y + checkbuf.height > bigbuf.height) {\n throw new RangeError();\n }\n var dif = 0;\n var numpix = 0;\n for (var cx = 0; cx < checkbuf.width; cx++) {\n for (var cy = 0; cy < checkbuf.height; cy++) {\n var i1 = (x + cx) * 4 + (y + cy) * bigbuf.width * 4;\n var i2 = cx * 4 + cy * checkbuf.width * 4;\n var d = 0;\n d = d + Math.abs(bigbuf.data[i1 + 0] - checkbuf.data[i2 + 0]) | 0;\n d = d + Math.abs(bigbuf.data[i1 + 1] - checkbuf.data[i2 + 1]) | 0;\n d = d + Math.abs(bigbuf.data[i1 + 2] - checkbuf.data[i2 + 2]) | 0;\n var weight = checkbuf.data[i2 + 3] / 255;\n numpix += weight;\n dif += d * d * weight;\n }\n }\n return Math.sqrt(dif / numpix);\n}\nexports.simpleCompareRMSE = simpleCompareRMSE;\n/**\n* Returns the difference between two colors (scaled to the alpha of the second color)\n*/\nfunction coldif(r1, g1, b1, r2, g2, b2, a2) {\n return (Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2)) * a2 / 255; //only applies alpha for 2nd buffer!\n}\nexports.coldif = coldif;\n/**\n * Turns map of promises into a map that contains the resolved values after loading.\n * @param input\n */\nfunction asyncMap(input) {\n var raw = {};\n var promises = [];\n for (var a in input) {\n if (input.hasOwnProperty(a)) {\n raw[a] = null;\n promises.push(input[a].then(function (a, i) { raw[a] = i; r[a] = i; }.bind(null, a)));\n }\n }\n var r = {};\n var promise = Promise.all(promises).then(() => { r.loaded = true; return r; });\n Object.defineProperty(r, \"loaded\", { enumerable: false, value: false, writable: true });\n Object.defineProperty(r, \"promise\", { enumerable: false, value: promise });\n Object.defineProperty(r, \"raw\", { enumerable: false, value: raw });\n return Object.assign(r, raw);\n}\nexports.asyncMap = asyncMap;\n/**\n* Same as asyncMap, but casts the properties to ImageData in typescript\n*/\nfunction webpackImages(input) {\n return asyncMap(input);\n}\nexports.webpackImages = webpackImages;\nclass ImageDataSet {\n constructor() {\n this.buffers = [];\n }\n matchBest(img, x, y, max) {\n let best = null;\n let bestscore = max;\n for (let a = 0; a < this.buffers.length; a++) {\n let score = img.pixelCompare(this.buffers[a], x, y, bestscore);\n if (isFinite(score) && (bestscore == undefined || score < bestscore)) {\n bestscore = score;\n best = a;\n }\n }\n if (best == null) {\n return null;\n }\n return { index: best, score: bestscore };\n }\n static fromFilmStrip(baseimg, width) {\n if ((baseimg.width % width) != 0) {\n throw new Error(\"slice size does not fit in base img\");\n }\n let r = new ImageDataSet();\n for (let x = 0; x < baseimg.width; x += width) {\n r.buffers.push(baseimg.clone(new _1.Rect(x, 0, width, baseimg.height)));\n }\n return r;\n }\n static fromFilmStripUneven(baseimg, widths) {\n let r = new ImageDataSet();\n let x = 0;\n for (let w of widths) {\n r.buffers.push(baseimg.clone(new _1.Rect(x, 0, w, baseimg.height)));\n x += w;\n if (x > baseimg.width) {\n throw new Error(\"sampling filmstrip outside bounds\");\n }\n }\n if (x != baseimg.width) {\n throw new Error(\"unconsumed pixels left in film strip imagedata\");\n }\n return r;\n }\n static fromAtlas(baseimg, slices) {\n let r = new ImageDataSet();\n for (let slice of slices) {\n r.buffers.push(baseimg.clone(slice));\n }\n return r;\n }\n}\nexports.ImageDataSet = ImageDataSet;\n\n\n/***/ }),\n\n/***/ \"./src/base/imgref.ts\":\n/*!****************************!*\\\n !*** ./src/base/imgref.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ImgRefData = exports.ImgRefBind = exports.ImgRefCtx = exports.ImgRef = void 0;\nconst index_1 = __webpack_require__(/*! ./index */ \"./src/base/index.ts\");\n/**\n * Represents an image that might be in different types of memory\n * This is mostly used to represent images still in Alt1 memory that have\n * not been transfered to js yet. Various a1lib api's use this type and\n * choose the most efficient approach based on the memory type\n */\nclass ImgRef {\n constructor(x, y, w, h) {\n this.t = \"none\";\n this.x = x;\n this.y = y;\n this.width = w;\n this.height = h;\n }\n read(x = 0, y = 0, w = this.width, h = this.height) {\n throw new Error(\"This imgref (\" + this.t + \") does not support toData\");\n }\n findSubimage(needle, sx = 0, sy = 0, w = this.width, h = this.height) {\n return index_1.ImageDetect.findSubimage(this, needle, sx, sy, w, h);\n }\n toData(x = this.x, y = this.y, w = this.width, h = this.height) {\n return this.read(x - this.x, y - this.y, w, h);\n }\n ;\n containsArea(rect) {\n return this.x <= rect.x && this.y <= rect.y && this.x + this.width >= rect.x + rect.width && this.y + this.height >= rect.y + rect.height;\n }\n}\nexports.ImgRef = ImgRef;\n/**\n * Represents an image in js render memory (canvas/image tag)\n */\nclass ImgRefCtx extends ImgRef {\n constructor(img, x = 0, y = 0) {\n if (img instanceof CanvasRenderingContext2D) {\n super(x, y, img.canvas.width, img.canvas.height);\n this.ctx = img;\n }\n else {\n super(x, y, img.width, img.height);\n var cnv = (img instanceof HTMLCanvasElement ? img : img.toCanvas());\n this.ctx = cnv.getContext(\"2d\");\n }\n this.t = \"ctx\";\n }\n read(x = 0, y = 0, w = this.width, h = this.height) {\n return this.ctx.getImageData(x, y, w, h);\n }\n}\nexports.ImgRefCtx = ImgRefCtx;\n/**\n * Represents in image in Alt1 memory, This type of image can be searched for subimages\n * very efficiently and transfering the full image to js can be avoided this way\n */\nclass ImgRefBind extends ImgRef {\n constructor(handle, x = 0, y = 0, w = 0, h = 0) {\n super(x, y, w, h);\n this.handle = handle;\n this.t = \"bind\";\n }\n read(x = 0, y = 0, w = this.width, h = this.height) {\n return (0, index_1.transferImageData)(this.handle, x, y, w, h);\n }\n}\nexports.ImgRefBind = ImgRefBind;\n/**\n * Represents an image in js memory\n */\nclass ImgRefData extends ImgRef {\n constructor(buf, x = 0, y = 0) {\n super(x, y, buf.width, buf.height);\n this.buf = buf;\n this.t = \"data\";\n }\n read(x = 0, y = 0, w = this.width, h = this.height) {\n if (x == 0 && y == 0 && w == this.width && h == this.height) {\n return this.buf;\n }\n var r = new ImageData(w, h);\n for (var b = y; b < y + h; b++) {\n for (var a = x; a < x + w; a++) {\n var i1 = (a - x) * 4 + (b - y) * w * 4;\n var i2 = a * 4 + b * 4 * this.buf.width;\n r.data[i1] = this.buf.data[i2];\n r.data[i1 + 1] = this.buf.data[i2 + 1];\n r.data[i1 + 2] = this.buf.data[i2 + 2];\n r.data[i1 + 3] = this.buf.data[i2 + 3];\n }\n }\n return r;\n }\n}\nexports.ImgRefData = ImgRefData;\n\n\n/***/ }),\n\n/***/ \"./src/base/index.ts\":\n/*!***************************!*\\\n !*** ./src/base/index.ts ***!\n \\***************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ImageDataSet = exports.findSubbuffer = exports.simpleCompare = exports.findSubimage = exports.webpackImages = exports.NodePolyfill = exports.ImageData = exports.Rect = exports.PasteInput = exports.ImageDetect = void 0;\n__webpack_require__(/*! ./declarations */ \"./src/base/declarations.ts\");\nexports.ImageDetect = __importStar(__webpack_require__(/*! ./imagedetect */ \"./src/base/imagedetect.ts\"));\nexports.PasteInput = __importStar(__webpack_require__(/*! ./pasteinput */ \"./src/base/pasteinput.ts\"));\nvar rect_1 = __webpack_require__(/*! ./rect */ \"./src/base/rect.ts\");\nObject.defineProperty(exports, \"Rect\", ({ enumerable: true, get: function () { return __importDefault(rect_1).default; } }));\nvar imagedata_extensions_1 = __webpack_require__(/*! ./imagedata-extensions */ \"./src/base/imagedata-extensions.ts\");\nObject.defineProperty(exports, \"ImageData\", ({ enumerable: true, get: function () { return imagedata_extensions_1.ImageData; } }));\nexports.NodePolyfill = __importStar(__webpack_require__(/*! ./nodepolyfill */ \"./src/base/nodepolyfill.ts\"));\n__exportStar(__webpack_require__(/*! ./imgref */ \"./src/base/imgref.ts\"), exports);\n__exportStar(__webpack_require__(/*! ./wrapper */ \"./src/base/wrapper.ts\"), exports);\nvar imagedetect_1 = __webpack_require__(/*! ./imagedetect */ \"./src/base/imagedetect.ts\");\nObject.defineProperty(exports, \"webpackImages\", ({ enumerable: true, get: function () { return imagedetect_1.webpackImages; } }));\nObject.defineProperty(exports, \"findSubimage\", ({ enumerable: true, get: function () { return imagedetect_1.findSubimage; } }));\nObject.defineProperty(exports, \"simpleCompare\", ({ enumerable: true, get: function () { return imagedetect_1.simpleCompare; } }));\nObject.defineProperty(exports, \"findSubbuffer\", ({ enumerable: true, get: function () { return imagedetect_1.findSubbuffer; } }));\nObject.defineProperty(exports, \"ImageDataSet\", ({ enumerable: true, get: function () { return imagedetect_1.ImageDataSet; } }));\n\n\n/***/ }),\n\n/***/ \"./src/base/nodepolyfill.ts\":\n/*!**********************************!*\\\n !*** ./src/base/nodepolyfill.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n//nodejs and electron polyfills for web api's\n//commented out type info as that breaks webpack with optional dependencies\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.imageDataFromBuffer = exports.imageDataFromBase64 = exports.imageDataToFileBytes = exports.createCanvas = exports.imageDataToDrawable = exports.requireElectronCommon = exports.requireNodeCanvas = exports.requireSharp = exports.polyfillRequire = void 0;\nconst index_1 = __webpack_require__(/*! ./index */ \"./src/base/index.ts\");\nconst imagedetect_1 = __webpack_require__(/*! ./imagedetect */ \"./src/base/imagedetect.ts\");\nvar requirefunction = null;\n/**\n * Call this function to let the libs require extra dependencies on nodejs in order\n * to polyfill some browser api's (mostly image compression/decompression)\n * `NodePolifill.polyfillRequire(require);` should solve most cases\n */\nfunction polyfillRequire(requirefn) {\n requirefunction = requirefn;\n}\nexports.polyfillRequire = polyfillRequire;\nfunction requireSharp() {\n try {\n if (requirefunction) {\n return requirefunction(\"sharp\");\n }\n else {\n return __webpack_require__(/* webpackIgnore: true */ /*! sharp */ \"sharp\"); // as typeof import(\"sharp\");\n }\n }\n catch (e) { }\n return null;\n}\nexports.requireSharp = requireSharp;\nfunction requireNodeCanvas() {\n //attempt to require sharp first, after loading canvas the module sharp fails to load\n requireSharp();\n try {\n if (requirefunction) {\n return requirefunction(\"canvas\");\n }\n else {\n return __webpack_require__(/* webpackIgnore: true */ /*! canvas */ \"canvas\"); // as typeof import(\"sharp\");\n }\n }\n catch (e) { }\n return null;\n}\nexports.requireNodeCanvas = requireNodeCanvas;\nfunction requireElectronCommon() {\n try {\n if (requirefunction) {\n return requirefunction(\"electron/common\");\n }\n else {\n return __webpack_require__(/* webpackIgnore: true */ /*! electron/common */ \"electron/common\");\n }\n }\n catch (e) { }\n return null;\n}\nexports.requireElectronCommon = requireElectronCommon;\nfunction imageDataToDrawable(buf) {\n let nodecnv = requireNodeCanvas();\n if (!nodecnv) {\n throw new Error(\"couldn't find built-in canvas or the module 'canvas'\");\n }\n return new nodecnv.ImageData(buf.data, buf.width, buf.height);\n}\nexports.imageDataToDrawable = imageDataToDrawable;\nfunction createCanvas(w, h) {\n let nodecnv = requireNodeCanvas();\n if (!nodecnv) {\n throw new Error(\"couldn't find built-in canvas or the module 'canvas'\");\n }\n return nodecnv.createCanvas(w, h);\n}\nexports.createCanvas = createCanvas;\nfunction flipBGRAtoRGBA(data) {\n for (let i = 0; i < data.length; i += 4) {\n let tmp = data[i + 2];\n data[i + 2] = data[i + 0];\n data[i + 0] = tmp;\n }\n}\nasync function imageDataToFileBytes(buf, format, quality) {\n //use the electron API if we're in electron\n var electronCommon;\n var sharp;\n if (electronCommon = requireElectronCommon()) {\n let nativeImage = electronCommon.nativeImage;\n //need to copy the buffer in order to flip it without destroying the original\n let bufcpy = Buffer.from(buf.data.slice(buf.data.byteOffset, buf.data.byteLength));\n flipBGRAtoRGBA(bufcpy);\n let nativeimg = nativeImage.createFromBitmap(bufcpy, { width: buf.width, height: buf.height });\n return nativeimg.toPNG();\n }\n else if (sharp = requireSharp()) {\n let img = sharp(Buffer.from(buf.data.buffer), { raw: { width: buf.width, height: buf.height, channels: 4 } });\n if (format == \"image/png\") {\n img.png();\n }\n else if (format == \"image/webp\") {\n var opts = { quality: 80 };\n if (typeof quality == \"number\") {\n opts.quality = quality * 100;\n }\n img.webp(opts);\n }\n else {\n throw new Error(\"unknown image format: \" + format);\n }\n return await img.toBuffer({ resolveWithObject: false }).buffer;\n }\n throw new Error(\"coulnd't find build-in image compression methods or the module 'electron/common' or 'sharp'\");\n}\nexports.imageDataToFileBytes = imageDataToFileBytes;\nfunction imageDataFromBase64(base64) {\n return imageDataFromBuffer(Buffer.from(base64, \"base64\"));\n}\nexports.imageDataFromBase64 = imageDataFromBase64;\nasync function imageDataFromBuffer(buffer) {\n (0, imagedetect_1.clearPngColorspace)(buffer);\n //use the electron API if we're in electron\n var electronCommon;\n var nodecnv;\n if (electronCommon = requireElectronCommon()) {\n let nativeImage = electronCommon.nativeImage;\n let img = nativeImage.createFromBuffer(buffer);\n let pixels = img.toBitmap();\n let size = img.getSize();\n let pixbuf = new Uint8ClampedArray(pixels.buffer, pixels.byteOffset, pixels.byteLength);\n flipBGRAtoRGBA(pixbuf);\n return new index_1.ImageData(pixbuf, size.width, size.height);\n }\n else if (nodecnv = requireNodeCanvas()) {\n return new Promise((done, err) => {\n let img = new nodecnv.Image();\n img.onerror = err;\n img.onload = () => {\n var cnv = nodecnv.createCanvas(img.naturalWidth, img.naturalHeight);\n var ctx = cnv.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n var data = ctx.getImageData(0, 0, img.naturalWidth, img.naturalHeight);\n //use our own class\n done(new index_1.ImageData(data.data, data.width, data.height));\n };\n img.src = Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n });\n }\n throw new Error(\"couldn't find built-in canvas, module 'electron/common' or the module 'canvas'\");\n}\nexports.imageDataFromBuffer = imageDataFromBuffer;\n\n\n/***/ }),\n\n/***/ \"./src/base/pasteinput.ts\":\n/*!********************************!*\\\n !*** ./src/base/pasteinput.ts ***!\n \\********************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.fileDialog = exports.start = exports.startDragNDrop = exports.triggerPaste = exports.unlisten = exports.listen = exports.lastref = void 0;\nconst index_1 = __webpack_require__(/*! ./index */ \"./src/base/index.ts\");\nconst ImageDetect = __importStar(__webpack_require__(/*! ./imagedetect */ \"./src/base/imagedetect.ts\"));\nvar listeners = [];\nvar started = false;\nvar dndStarted = false;\nvar pasting = false;\nexports.lastref = null;\nfunction listen(func, errorfunc, dragndrop) {\n listeners.push({ cb: func, error: errorfunc });\n if (!started) {\n start();\n }\n if (dragndrop && !dndStarted) {\n startDragNDrop();\n }\n}\nexports.listen = listen;\nfunction unlisten(func) {\n let i = listeners.findIndex(c => c.cb == func);\n if (i != -1) {\n listeners.splice(i, 1);\n }\n}\nexports.unlisten = unlisten;\n/**\n * currently used in multiple document situations (iframe), might be removed in the future\n */\nfunction triggerPaste(img) {\n exports.lastref = img;\n for (var a in listeners) {\n listeners[a].cb(exports.lastref);\n }\n}\nexports.triggerPaste = triggerPaste;\nfunction pasted(img) {\n pasting = false;\n let cnv = img instanceof HTMLCanvasElement ? img : img.toCanvas();\n triggerPaste(new index_1.ImgRefCtx(cnv));\n}\nfunction error(error, mes) {\n var _a, _b;\n pasting = false;\n for (var a in listeners) {\n (_b = (_a = listeners[a]).error) === null || _b === void 0 ? void 0 : _b.call(_a, mes, error);\n }\n}\nfunction startDragNDrop() {\n var getitem = function (items) {\n var foundimage = \"\";\n for (var a = 0; a < items.length; a++) {\n var item = items[a];\n var m = item.type.match(/^image\\/(\\w+)$/);\n if (m) {\n if (m[1] == \"png\") {\n return item;\n }\n else {\n foundimage = m[1];\n }\n }\n }\n if (foundimage) {\n error(\"notpng\", \"The image you uploaded is not a .png image. Other image type have compression noise and can't be used for image detection.\");\n }\n return null;\n };\n window.addEventListener(\"dragover\", function (e) {\n e.preventDefault();\n });\n window.addEventListener(\"drop\", function (e) {\n if (!e.dataTransfer) {\n return;\n }\n var item = getitem(e.dataTransfer.items);\n e.preventDefault();\n if (!item) {\n return;\n }\n fromFile(item.getAsFile());\n });\n}\nexports.startDragNDrop = startDragNDrop;\nfunction start() {\n if (started) {\n return;\n }\n started = true;\n //determine if we have a clipboard api\n //try{a=new Event(\"clipboard\"); a=\"clipboardData\" in a;}\n //catch(e){a=false;}\n var ischrome = !!navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match(/Edge/);\n //old method breaks after chrome 41, revert to good old user agent sniffing\n //nvm, internet explorer (edge) decided that it wants to be chrome, however fails at delivering\n //turns out this one is interesting, edge is a hybrid between the paste api's\n var apipasted = function (e) {\n if (!e.clipboardData) {\n return;\n }\n for (var a = 0; a < e.clipboardData.items.length; a++) { //loop all data types\n if (e.clipboardData.items[a].type.indexOf(\"image\") != -1) {\n var file = e.clipboardData.items[a].getAsFile();\n if (file) {\n var img = new Image();\n img.src = (window.URL || window.webkitURL).createObjectURL(file);\n if (img.width > 0) {\n pasted(img);\n }\n else {\n img.onload = function () { pasted(img); };\n }\n }\n }\n }\n };\n if (ischrome) {\n document.addEventListener(\"paste\", apipasted);\n }\n else {\n var catcher = document.createElement(\"div\");\n catcher.setAttribute(\"contenteditable\", \"\");\n catcher.className = \"forcehidden\"; //retarded ie safety/bug, cant apply styles using js//TODO i don't even know what's going on\n catcher.onpaste = function (e) {\n if (e.clipboardData && e.clipboardData.items) {\n apipasted(e);\n return;\n }\n setTimeout(function () {\n var b = catcher.children[0];\n if (!b || b.tagName != \"IMG\") {\n return;\n }\n var img = new Image();\n img.src = b.src;\n var a = img.src.match(/^data:([\\w\\/]+);/);\n if (img.width > 0) {\n pasted(img);\n }\n else {\n img.onload = function () { pasted(img); };\n }\n catcher.innerHTML = \"\";\n }, 1);\n };\n document.body.appendChild(catcher);\n }\n //detect if ctrl-v is pressed and focus catcher if needed\n document.addEventListener(\"keydown\", function (e) {\n if (e.target.tagName == \"INPUT\") {\n return;\n }\n if (e.keyCode != \"V\".charCodeAt(0) || !e.ctrlKey) {\n return;\n }\n pasting = true;\n setTimeout(function () {\n if (pasting) {\n error(\"noimg\", \"You pressed Ctrl+V, but no image was pasted by your browser, make sure your clipboard contains an image, and not a link to an image.\");\n }\n }, 1000);\n if (catcher) {\n catcher.focus();\n }\n });\n}\nexports.start = start;\nfunction fileDialog() {\n var fileinput = document.createElement(\"input\");\n fileinput.type = \"file\";\n fileinput.accept = \"image/png\";\n fileinput.onchange = function () { if (fileinput.files && fileinput.files[0]) {\n fromFile(fileinput.files[0]);\n } };\n fileinput.click();\n return fileinput;\n}\nexports.fileDialog = fileDialog;\nfunction fromFile(file) {\n if (!file) {\n return;\n }\n var reader = new FileReader();\n reader.onload = function () {\n var bytearray = new Uint8Array(reader.result);\n if (ImageDetect.isPngBuffer(bytearray)) {\n ImageDetect.clearPngColorspace(bytearray);\n }\n var blob = new Blob([bytearray], { type: \"image/png\" });\n var img = new Image();\n img.onerror = () => error(\"invalidfile\", \"The file you uploaded could not be opened as an image.\");\n var bloburl = URL.createObjectURL(blob);\n img.src = bloburl;\n if (img.width > 0) {\n pasted(img);\n URL.revokeObjectURL(bloburl);\n }\n else {\n img.onload = function () { pasted(img); URL.revokeObjectURL(bloburl); };\n }\n };\n reader.readAsArrayBuffer(file);\n}\n\n\n/***/ }),\n\n/***/ \"./src/base/rect.ts\":\n/*!**************************!*\\\n !*** ./src/base/rect.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, exports) => {\n\n\n//util class for rectangle maths\n//TODO shit this sucks can we remove it again?\n//more of a shorthand to get {x,y,width,height} than a class\n//kinda starting to like it again\n//TODO remove rant\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n;\n/**\n * Simple rectangle class with some util functions\n */\nclass Rect {\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.width = w;\n this.height = h;\n }\n static fromArgs(...args) {\n if (typeof args[0] == \"object\") {\n return new Rect(args[0].x, args[0].y, args[0].width, args[0].height);\n }\n else if (typeof args[0] == \"number\" && args.length >= 4) {\n return new Rect(args[0], args[1], args[2], args[3]);\n }\n else {\n throw new Error(\"invalid rect args\");\n }\n }\n /**\n * Resizes this Rect to include the full size of a given second rectangle\n */\n union(r2) {\n var x = Math.min(this.x, r2.x);\n var y = Math.min(this.y, r2.y);\n this.width = Math.max(this.x + this.width, r2.x + r2.width) - x;\n this.height = Math.max(this.y + this.height, r2.y + r2.height) - y;\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * Resizes this Rect to include a given point\n */\n includePoint(x, y) {\n this.union(new Rect(x, y, 0, 0));\n }\n /**\n * Grows the rectangle with the given dimensions\n */\n inflate(w, h) {\n this.x -= w;\n this.y -= h;\n this.width += 2 * w;\n this.height += 2 * h;\n }\n /**\n * Resizes this Rect to the area that overlaps a given Rect\n * width and height will be set to 0 if the intersection does not exist\n */\n intersect(r2) {\n if (this.x < r2.x) {\n this.width -= r2.x - this.x;\n this.x = r2.x;\n }\n if (this.y < r2.y) {\n this.height -= r2.y - this.y;\n this.y = r2.y;\n }\n this.width = Math.min(this.x + this.width, r2.x + r2.width) - this.x;\n this.height = Math.min(this.y + this.height, r2.y + r2.height) - this.y;\n if (this.width <= 0 || this.height <= 0) {\n this.width = 0;\n this.height = 0;\n }\n }\n /**\n * Returns wether this Rect has at least one pixel overlap with a given Rect\n */\n overlaps(r2) {\n return this.x < r2.x + r2.width && this.x + this.width > r2.x && this.y < r2.y + r2.height && this.y + this.height > r2.y;\n }\n /**\n * Returns wether a given Rect fits completely inside this Rect\n * @param r2\n */\n contains(r2) {\n return this.x <= r2.x && this.x + this.width >= r2.x + r2.width && this.y <= r2.y && this.y + this.height >= r2.y + r2.height;\n }\n /**\n * Returns wether a given point lies inside this Rect\n */\n containsPoint(x, y) {\n return this.x <= x && this.x + this.width > x && this.y <= y && this.y + this.height > y;\n }\n}\nexports[\"default\"] = Rect;\n\n\n/***/ }),\n\n/***/ \"./src/base/wrapper.ts\":\n/*!*****************************!*\\\n !*** ./src/base/wrapper.ts ***!\n \\*****************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.captureStream = exports.captureMultiAsync = exports.captureAsync = exports.ImageStreamReader = exports.once = exports.removeListener = exports.on = exports.addResizeElement = exports.getMousePosition = exports.hasAlt1Version = exports.resetEnvironment = exports.identifyApp = exports.unmixColor = exports.mixColor = exports.encodeImageString = exports.decodeImageString = exports.transferImageData = exports.captureHoldFullRs = exports.captureHoldScreen = exports.captureHold = exports.capture = exports.getdisplaybounds = exports.requireAlt1 = exports.openbrowser = exports.skinName = exports.hasAlt1 = exports.newestversion = exports.Alt1Error = exports.NoAlt1Error = void 0;\nconst rect_1 = __importDefault(__webpack_require__(/*! ./rect */ \"./src/base/rect.ts\"));\nconst imgref_1 = __webpack_require__(/*! ./imgref */ \"./src/base/imgref.ts\");\nconst imagedata_extensions_1 = __webpack_require__(/*! ./imagedata-extensions */ \"./src/base/imagedata-extensions.ts\");\n__webpack_require__(/*! ./alt1api */ \"./src/base/alt1api.ts\");\n/**\n * Thrown when a method is called that can not be used outside of Alt1\n */\nclass NoAlt1Error extends Error {\n constructor() {\n super();\n this.message = \"This method can not be ran outside of Alt1\";\n }\n}\nexports.NoAlt1Error = NoAlt1Error;\n;\n/**\n * Thrown when the Alt1 API returns an invalid result\n * Errors of a different type are throw when internal Alt1 errors occur\n */\nclass Alt1Error extends Error {\n}\nexports.Alt1Error = Alt1Error;\n/**\n * The latest Alt1 version\n */\nexports.newestversion = \"1.5.5\";\n/**\n * Whether the Alt1 API is available\n */\nexports.hasAlt1 = (typeof alt1 != \"undefined\");\n/**\n * The name of the Alt1 interface skin. (Always \"default\" if running in a browser)\n */\nexports.skinName = exports.hasAlt1 ? alt1.skinName : \"default\";\n/**\n * Max number of bytes that can be sent by alt1 in one function\n * Not completely sure why this number is different than window.alt1.maxtranfer\n */\nvar maxtransfer = 4000000;\n/**\n * Open a link in the default browser\n * @deprecated use window.open instead\n */\nfunction openbrowser(url) {\n if (exports.hasAlt1) {\n alt1.openBrowser(url);\n }\n else {\n window.open(url, '_blank');\n }\n}\nexports.openbrowser = openbrowser;\n/**\n * Throw if Alt1 API is not available\n */\nfunction requireAlt1() {\n if (!exports.hasAlt1) {\n throw new NoAlt1Error();\n }\n}\nexports.requireAlt1 = requireAlt1;\n/**\n * Returns an object with a rectangle that spans all screens\n */\nfunction getdisplaybounds() {\n if (!exports.hasAlt1) {\n return false;\n }\n return new rect_1.default(alt1.screenX, alt1.screenY, alt1.screenWidth, alt1.screenHeight);\n}\nexports.getdisplaybounds = getdisplaybounds;\n/**\n * gets an imagebuffer with pixel data about the requested region\n */\nfunction capture(...args) {\n //TODO change null return on error into throw instead (x3)\n if (!exports.hasAlt1) {\n throw new NoAlt1Error();\n }\n var rect = rect_1.default.fromArgs(...args);\n if (alt1.capture) {\n return new imagedata_extensions_1.ImageData(alt1.capture(rect.x, rect.y, rect.width, rect.height), rect.width, rect.height);\n }\n var buf = new imagedata_extensions_1.ImageData(rect.width, rect.height);\n if (rect.width * rect.height * 4 <= maxtransfer) {\n var data = alt1.getRegion(rect.x, rect.y, rect.width, rect.height);\n if (!data) {\n return null;\n }\n decodeImageString(data, buf, 0, 0, rect.width, rect.height);\n }\n else {\n //split up the request to to exceed the single transfer limit (for now)\n var x1 = rect.x;\n var ref = alt1.bindRegion(rect.x, rect.y, rect.width, rect.height);\n if (ref <= 0) {\n return null;\n }\n while (x1 < rect.x + rect.width) {\n var x2 = Math.min(rect.x + rect.width, Math.floor(x1 + (maxtransfer / 4 / rect.height)));\n var data = alt1.bindGetRegion(ref, x1, rect.y, x2 - x1, rect.height);\n if (!data) {\n return null;\n }\n decodeImageString(data, buf, x1 - rect.x, 0, x2 - x1, rect.height);\n x1 = x2;\n }\n }\n return buf;\n}\nexports.capture = capture;\n/**\n * Makes alt1 bind an area of the rs client in memory without sending it to the js client\n * returns an imgref object which can be used to get pixel data using the imgreftobuf function\n * currently only one bind can exist per app and the ref in (v) will always be 1\n */\nfunction captureHold(x, y, w, h) {\n x = Math.round(x);\n y = Math.round(y);\n w = Math.round(w);\n h = Math.round(h);\n requireAlt1();\n var r = alt1.bindRegion(x, y, w, h);\n if (r <= 0) {\n throw new Alt1Error(\"capturehold failed\");\n }\n return new imgref_1.ImgRefBind(r, x, y, w, h);\n}\nexports.captureHold = captureHold;\n/**\n * Same as captureHoldRegion, but captures the screen instead of the rs client. it also uses screen coordinates instead and can capture outside of the rs client\n */\nfunction captureHoldScreen(x, y, w, h) {\n x = Math.round(x);\n y = Math.round(y);\n w = Math.round(w);\n h = Math.round(h);\n requireAlt1();\n var r = alt1.bindScreenRegion(x, y, w, h);\n if (r <= 0) {\n return false;\n }\n return new imgref_1.ImgRefBind(r, x, y, w, h);\n}\nexports.captureHoldScreen = captureHoldScreen;\n/**\n * bind the full rs window if the rs window can be detected by alt1, otherwise return the full screen\n */\nfunction captureHoldFullRs() {\n return captureHold(0, 0, alt1.rsWidth, alt1.rsHeight);\n}\nexports.captureHoldFullRs = captureHoldFullRs;\n/**\n * returns a subregion from a bound image\n * used internally in imgreftobuf if imgref is a bound image\n * @deprecated This should be handled internall by the imgrefbind.toData method\n */\nfunction transferImageData(handle, x, y, w, h) {\n x = Math.round(x);\n y = Math.round(y);\n w = Math.round(w);\n h = Math.round(h);\n requireAlt1();\n if (alt1.bindGetRegionBuffer) {\n return new imagedata_extensions_1.ImageData(alt1.bindGetRegionBuffer(handle, x, y, w, h), w, h);\n }\n var r = new imagedata_extensions_1.ImageData(w, h);\n var x1 = x;\n while (true) { //split up the request to to exceed the single transfer limit (for now)\n var x2 = Math.min(x + w, Math.floor(x1 + (maxtransfer / 4 / h)));\n var a = alt1.bindGetRegion(handle, x1, y, x2 - x1, h);\n if (!a) {\n throw new Alt1Error();\n }\n decodeImageString(a, r, x1 - x, 0, x2 - x1, h);\n x1 = x2;\n if (x1 == x + w) {\n break;\n }\n ;\n }\n return r;\n}\nexports.transferImageData = transferImageData;\n/**\n * decodes a returned string from alt1 to an imagebuffer\n */\nfunction decodeImageString(imagestring, target, x, y, w, h) {\n var bin = atob(imagestring);\n var bytes = target.data;\n w |= 0;\n h |= 0;\n var offset = 4 * x + 4 * y * target.width;\n var target_width = target.width | 0;\n for (var a = 0; a < w; a++) {\n for (var b = 0; b < h; b++) {\n var i1 = (offset + (a * 4 | 0) + (b * target_width * 4 | 0)) | 0;\n var i2 = ((a * 4 | 0) + (b * 4 * w | 0)) | 0;\n bytes[i1 + 0 | 0] = bin.charCodeAt(i2 + 2 | 0); //fix weird red/blue swap in c#\n bytes[i1 + 1 | 0] = bin.charCodeAt(i2 + 1 | 0);\n bytes[i1 + 2 | 0] = bin.charCodeAt(i2 + 0 | 0);\n bytes[i1 + 3 | 0] = bin.charCodeAt(i2 + 3 | 0);\n }\n }\n return target;\n}\nexports.decodeImageString = decodeImageString;\n/**\n * encodes an imagebuffer to a string\n */\nfunction encodeImageString(buf, sx = 0, sy = 0, sw = buf.width, sh = buf.height) {\n var raw = \"\";\n for (var y = sy; y < sy + sh; y++) {\n for (var x = sx; x < sx + sw; x++) {\n var i = 4 * x + 4 * buf.width * y | 0;\n raw += String.fromCharCode(buf.data[i + 2 | 0]);\n raw += String.fromCharCode(buf.data[i + 1 | 0]);\n raw += String.fromCharCode(buf.data[i + 0 | 0]);\n raw += String.fromCharCode(buf.data[i + 3 | 0]);\n }\n }\n return btoa(raw);\n}\nexports.encodeImageString = encodeImageString;\n/**\n * mixes the given color into a single int. This format is used by alt1\n */\nfunction mixColor(r, g, b, a = 255) {\n return (b << 0) + (g << 8) + (r << 16) + (a << 24);\n}\nexports.mixColor = mixColor;\nfunction unmixColor(col) {\n var r = (col >> 16) & 0xff;\n var g = (col >> 8) & 0xff;\n var b = (col >> 0) & 0xff;\n return [r, g, b];\n}\nexports.unmixColor = unmixColor;\nfunction identifyApp(url) {\n if (exports.hasAlt1) {\n alt1.identifyAppUrl(url);\n }\n}\nexports.identifyApp = identifyApp;\nfunction resetEnvironment() {\n exports.hasAlt1 = (typeof alt1 != \"undefined\");\n exports.skinName = exports.hasAlt1 ? alt1.skinName : \"default\";\n}\nexports.resetEnvironment = resetEnvironment;\nfunction convertAlt1Version(str) {\n var a = str.match(/^(\\d+)\\.(\\d+)\\.(\\d+)$/);\n if (!a) {\n throw new RangeError(\"Invalid version string\");\n }\n return (+a[1]) * 1000 * 1000 + (+a[2]) * 1000 + (+a[3]) * 1;\n}\nvar cachedVersionInt = -1;\n/**\n * checks if alt1 is running and at least the given version. versionstr should be a string with the version eg: 1.3.2\n * @param versionstr\n */\nfunction hasAlt1Version(versionstr) {\n if (!exports.hasAlt1) {\n return false;\n }\n if (cachedVersionInt == -1) {\n cachedVersionInt = alt1.versionint;\n }\n return cachedVersionInt >= convertAlt1Version(versionstr);\n}\nexports.hasAlt1Version = hasAlt1Version;\n/**\n * Gets the current cursor position in the game, returns null if the rs window is not active (alt1.rsActive)\n */\nfunction getMousePosition() {\n var pos = alt1.mousePosition;\n if (pos == -1) {\n return null;\n }\n return { x: pos >>> 16, y: pos & 0xFFFF };\n}\nexports.getMousePosition = getMousePosition;\n/**\n * Registers a given HTML element as a frame border, when this element is dragged by the user the Alt1 frame will resize accordingly\n * Use the direction arguements to make a given direction stick to the mouse. eg. Only set left to true to make the element behave as the left border\n * Or set all to true to move the whole window. Not all combinations are permitted\n */\nfunction addResizeElement(el, left, top, right, bot) {\n if (!exports.hasAlt1 || !alt1.userResize) {\n return;\n }\n el.addEventListener(\"mousedown\", function (e) {\n alt1.userResize(left, top, right, bot);\n e.preventDefault();\n });\n}\nexports.addResizeElement = addResizeElement;\n/**\n * Add an event listener\n */\nfunction on(type, listener) {\n if (!exports.hasAlt1) {\n return;\n }\n if (!alt1.events) {\n alt1.events = {};\n }\n if (!alt1.events[type]) {\n alt1.events[type] = [];\n }\n alt1.events[type].push(listener);\n}\nexports.on = on;\n/**\n * Removes an event listener\n */\nfunction removeListener(type, listener) {\n var elist = exports.hasAlt1 && alt1.events && alt1.events[type];\n if (!elist) {\n return;\n }\n var i = elist.indexOf(listener);\n if (i == -1) {\n return;\n }\n elist.splice(i, 1);\n}\nexports.removeListener = removeListener;\n/**\n * Listens for the event to fire once and then stops listening\n * @param event\n * @param cb\n */\nfunction once(type, listener) {\n var fn = (e) => {\n removeListener(type, fn);\n listener(e);\n };\n on(type, fn);\n}\nexports.once = once;\n;\n/**\n * Used to read a set of images from a binary stream returned by the Alt1 API\n */\nclass ImageStreamReader {\n constructor(reader, ...args) {\n this.framebuffer = null;\n this.pos = 0;\n this.reading = false;\n this.closed = false;\n //paused state\n this.pausedindex = -1;\n this.pausedbuffer = null;\n this.streamreader = reader;\n if (args[0] instanceof imagedata_extensions_1.ImageData) {\n this.setFrameBuffer(args[0]);\n }\n else if (typeof args[0] == \"number\") {\n this.setFrameBuffer(new imagedata_extensions_1.ImageData(args[0], args[1]));\n }\n }\n /**\n *\n */\n setFrameBuffer(buffer) {\n if (this.reading) {\n throw new Error(\"can't change framebuffer while reading\");\n }\n this.framebuffer = buffer;\n }\n /**\n * Closes the underlying stream and ends reading\n */\n close() {\n this.streamreader.cancel();\n }\n /**\n * Reads a single image from the stream\n */\n async nextImage() {\n if (this.reading) {\n throw new Error(\"already reading from this stream\");\n }\n if (!this.framebuffer) {\n throw new Error(\"framebuffer not set\");\n }\n this.reading = true;\n var synctime = -Date.now();\n var starttime = Date.now();\n var r = false;\n while (!r) {\n if (this.pausedindex != -1 && this.pausedbuffer) {\n r = this.readChunk(this.pausedindex, this.framebuffer.data, this.pausedbuffer);\n }\n else {\n synctime += Date.now();\n var res = await this.streamreader.read();\n synctime -= Date.now();\n if (res.done) {\n throw new Error(\"Stream closed while reading\");\n }\n var data = res.value;\n r = this.readChunk(0, this.framebuffer.data, data);\n }\n }\n synctime += Date.now();\n //console.log(\"Decoded async image, \" + this.framebuffer.width + \"x\" + this.framebuffer.height + \" time: \" + (Date.now() - starttime) + \"ms (\" + synctime + \"ms main thread)\");\n this.reading = false;\n return this.framebuffer;\n }\n readChunk(i, framedata, buffer) {\n //very hot code, explicit int32 casting with |0 speeds it up by ~ x2\n i = i | 0;\n var framesize = framedata.length | 0;\n var pos = this.pos;\n var datalen = buffer.length | 0;\n //var data32 = new Float64Array(buffer.buffer);\n //var framedata32 = new Float64Array(framedata.buffer);\n //fix possible buffer misalignment\n //align to 16 for extra loop unrolling\n while (i < datalen) {\n //slow loop, fix alignment and other issues\n while (i < datalen && pos < framesize && (pos % 16 != 0 || !((i + 16 | 0) <= datalen && (pos + 16 | 0) <= framesize))) {\n var rel = pos;\n if (pos % 4 == 0) {\n rel = rel + 2 | 0;\n }\n if (pos % 4 == 2) {\n rel = rel - 2 | 0;\n }\n framedata[rel | 0] = buffer[i | 0];\n i = i + 1 | 0;\n pos = pos + 1 | 0;\n }\n //fast unrolled loop for large chunks i wish js had some sort of memcpy\n if (pos % 16 == 0) {\n while ((i + 16 | 0) <= datalen && (pos + 16 | 0) <= framesize) {\n framedata[pos + 0 | 0] = buffer[i + 2 | 0];\n framedata[pos + 1 | 0] = buffer[i + 1 | 0];\n framedata[pos + 2 | 0] = buffer[i + 0 | 0];\n framedata[pos + 3 | 0] = buffer[i + 3 | 0];\n framedata[pos + 4 | 0] = buffer[i + 6 | 0];\n framedata[pos + 5 | 0] = buffer[i + 5 | 0];\n framedata[pos + 6 | 0] = buffer[i + 4 | 0];\n framedata[pos + 7 | 0] = buffer[i + 7 | 0];\n framedata[pos + 8 | 0] = buffer[i + 10 | 0];\n framedata[pos + 9 | 0] = buffer[i + 9 | 0];\n framedata[pos + 10 | 0] = buffer[i + 8 | 0];\n framedata[pos + 11 | 0] = buffer[i + 11 | 0];\n framedata[pos + 12 | 0] = buffer[i + 14 | 0];\n framedata[pos + 13 | 0] = buffer[i + 13 | 0];\n framedata[pos + 14 | 0] = buffer[i + 12 | 0];\n framedata[pos + 15 | 0] = buffer[i + 15 | 0];\n //could speed it up another x2 but wouldn't be able to swap r/b swap and possible alignment issues\n //framedata32[pos / 8 + 0 | 0] = data32[i / 8 + 0 | 0];\n //framedata32[pos / 8 + 1 | 0] = data32[i / 8 + 1 | 0];\n //framedata32[pos / 4 + 2 | 0] = data32[i / 4 + 2 | 0];\n //framedata32[pos / 4 + 3 | 0] = data32[i / 4 + 3 | 0];\n pos = pos + 16 | 0;\n i = i + 16 | 0;\n }\n }\n if (pos >= framesize) {\n this.pausedbuffer = null;\n this.pausedindex = -1;\n this.pos = 0;\n if (i != buffer.length - 1) {\n this.pausedbuffer = buffer;\n this.pausedindex = i;\n }\n return true;\n }\n }\n this.pos = pos;\n this.pausedbuffer = null;\n this.pausedindex = -1;\n return false;\n }\n}\nexports.ImageStreamReader = ImageStreamReader;\n/**\n * Asynchronously captures a section of the game screen\n */\nasync function captureAsync(...args) {\n requireAlt1();\n var rect = rect_1.default.fromArgs(...args);\n if (alt1.captureAsync) {\n let img = await alt1.captureAsync(rect.x, rect.y, rect.width, rect.height);\n return new imagedata_extensions_1.ImageData(img, rect.width, rect.height);\n }\n if (!hasAlt1Version(\"1.4.6\")) {\n return capture(rect.x, rect.y, rect.width, rect.height);\n }\n var url = \"https://alt1api/pixel/getregion/\" + encodeURIComponent(JSON.stringify(Object.assign(Object.assign({}, rect), { format: \"raw\", quality: 1 })));\n var res = await fetch(url);\n var imgreader = new ImageStreamReader(res.body.getReader(), rect.width, rect.height);\n return imgreader.nextImage();\n}\nexports.captureAsync = captureAsync;\n/**\n * Asynchronously captures multple area's. This method captures the images in the same render frame if possible\n * @param areas\n */\nasync function captureMultiAsync(areas) {\n requireAlt1();\n var r = {};\n if (alt1.captureMultiAsync) {\n let bufs = await alt1.captureMultiAsync(areas);\n for (let a in areas) {\n if (!bufs[a]) {\n r[a] = null;\n }\n r[a] = new imagedata_extensions_1.ImageData(bufs[a], areas[a].width, areas[a].height);\n }\n return r;\n }\n var capts = [];\n var captids = [];\n for (var id in areas) {\n if (areas[id]) {\n capts.push(areas[id]);\n captids.push(id);\n }\n else {\n r[id] = null;\n }\n }\n if (capts.length == 0) {\n return r;\n }\n if (!hasAlt1Version(\"1.5.1\")) {\n var proms = [];\n for (var a = 0; a < capts.length; a++) {\n proms.push(captureAsync(capts[a]));\n }\n var results = await Promise.all(proms);\n for (var a = 0; a < capts.length; a++) {\n r[captids[a]] = results[a];\n }\n }\n else {\n var res = await fetch(\"https://alt1api/pixel/getregionmulti/\" + encodeURIComponent(JSON.stringify({ areas: capts, format: \"raw\", quality: 1 })));\n var imgreader = new ImageStreamReader(res.body.getReader());\n for (var a = 0; a < capts.length; a++) {\n var capt = capts[a];\n imgreader.setFrameBuffer(new imagedata_extensions_1.ImageData(capt.width, capt.height));\n r[captids[a]] = await imgreader.nextImage();\n }\n }\n return r;\n}\nexports.captureMultiAsync = captureMultiAsync;\n/**\n * Starts capturing a realtime stream of the game. Make sure you keep reading the stream and close it when you're done or Alt1 WILL crash\n * @param framecb Called whenever a new frame is decoded\n * @param errorcb Called whenever an error occurs, the error is rethrown if not defined\n * @param fps Maximum fps of the stream\n */\nfunction captureStream(x, y, width, height, fps, framecb, errorcb) {\n requireAlt1();\n if (!hasAlt1Version(\"1.4.6\")) {\n throw new Alt1Error(\"This function is not supported in this version of Alt1\");\n }\n var url = \"https://alt1api/pixel/streamregion/\" + encodeURIComponent(JSON.stringify({ x, y, width, height, fps, format: \"raw\" }));\n var res = fetch(url).then(async (res) => {\n var reader = new ImageStreamReader(res.body.getReader(), width, height);\n try {\n while (!reader.closed && !state.closed) {\n var img = await reader.nextImage();\n if (!state.closed) {\n framecb(img);\n state.framenr++;\n }\n }\n }\n catch (e) {\n if (!state.closed) {\n reader.close();\n if (errorcb) {\n errorcb(e);\n }\n else {\n throw e;\n }\n }\n }\n if (!reader.closed && state.closed) {\n reader.close();\n }\n });\n var state = {\n x, y, width, height,\n framenr: 0,\n close: () => { state.closed = true; },\n closed: false,\n };\n return state;\n}\nexports.captureStream = captureStream;\n\n\n/***/ }),\n\n/***/ \"canvas\":\n/*!*************************!*\\\n !*** external \"canvas\" ***!\n \\*************************/\n/***/ ((module) => {\n\nif(typeof __WEBPACK_EXTERNAL_MODULE_canvas__ === 'undefined') { var e = new Error(\"Cannot find module 'canvas'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_canvas__;\n\n/***/ }),\n\n/***/ \"electron/common\":\n/*!**********************************!*\\\n !*** external \"electron/common\" ***!\n \\**********************************/\n/***/ ((module) => {\n\nif(typeof __WEBPACK_EXTERNAL_MODULE_electron_common__ === 'undefined') { var e = new Error(\"Cannot find module 'electron/common'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_electron_common__;\n\n/***/ }),\n\n/***/ \"sharp\":\n/*!************************!*\\\n !*** external \"sharp\" ***!\n \\************************/\n/***/ ((module) => {\n\nif(typeof __WEBPACK_EXTERNAL_MODULE_sharp__ === 'undefined') { var e = new Error(\"Cannot find module 'sharp'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_sharp__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./src/base/index.ts\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"alt1/base\"), require(\"alt1/ocr\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"alt1/base\", \"alt1/ocr\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dialog\"] = factory(require(\"alt1/base\"), require(\"alt1/ocr\"));\n\telse\n\t\troot[\"Dialog\"] = factory(root[\"A1lib\"], root[\"OCR\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE_alt1_base__, __WEBPACK_EXTERNAL_MODULE_alt1_ocr__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/dialog/imgs/boxtl.data.png\":\n/*!****************************************!*\\\n !*** ./src/dialog/imgs/boxtl.data.png ***!\n \\****************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAx0lEQVQ4T5VRywrCMBBMaytYyMFHDw16CNWDBg8WoWAFpTf//4ecsGENMQ0UhmVmO5PdNEKZru0GVCLEL/cnS/MYwU3/Jo+AFiKbgevrE7bSmArksgk6DumVsrIKOmJ/G8JWGrMvjUBkbgLBhFzufBkB7uBPQKDcKJYR4C39ALhUuqj15J7/KwHIVIfztjWoZXOkmYuVtB4OQAM4GAFUh+UabmelZ0GANXdh+mW83eyoUz/ykeQm0G4g/j+wnC9NNQAl+VNR6y/yyxm6AFlANgAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/boxtl_leg.data.png\":\n/*!********************************************!*\\\n !*** ./src/dialog/imgs/boxtl_leg.data.png ***!\n \\********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAE0SURBVDhPjZFNTsMwEIVtJ45D05YmLVKBJRISsOIILNiw5QosOXpIKcpPHduFl0wINAHEJ+tpPB6/Gcv8+emRHZIX1TQ6QuBLbs37QNnVxQlj/P+L31yuH+7vZrNptt2QhxSy0vXe6SAMlYrQqshzyiPmt9fny2WslMqyrQr4+vQsTV8m0eTtdRNN582IjGmtob4nrNsLiqBJcjxfxKhGXBblIk6cNVL68AKwQDUCUVuHCsJZR8egrCpkdq0SSEIbb89vhoOZ53vNSYv0JeVpHni16fYCYYztsz10hzDWQEXQulI7Aq266BD0hHYdqC+BVl30CXlDUUZv+Bp9DIrIG4pBxE7XdPAb/bTkK0IVjN/6I1QmVquE9mMGo2KLJdI06xIjBOff72CLn/rr0YOfwVZr/QEeBH9rQlJ0YgAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/boxtr.data.png\":\n/*!****************************************!*\\\n !*** ./src/dialog/imgs/boxtr.data.png ***!\n \\****************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA3UlEQVQ4T6WTwQrCMBBEk9oKigEVFSweLOLF6sFehOYgePP/P2jNrE1ZcJFUD68J2cwkO23NofF0vD0IY1k3VLfveXVu+jWMALVYxzowxtjw+A2YGVtM1WIKl/szjEohlb8NuAWtkMru6sMYJplbkR0vKF9XH5s0kBs0fYgxyJRAM7clV1YMGxB9R4pxAG6J04tlOdwAIm63uzVnoIkk2unRAF+kKpJEg9HEcdAwQA59iJpIEg2kEEa4QbIBNkMYM0Arg0NEC1KM14i/WBVJuPcutHy+YQMw259CiJ5egv+YzBEq3jQAAAAASUVORK5CYII=\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/boxtr_leg.data.png\":\n/*!********************************************!*\\\n !*** ./src/dialog/imgs/boxtr_leg.data.png ***!\n \\********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAFgSURBVDhPnZO9TsMwFIWPHZuUpo2g6hswsbMzsbEgMfAKiIUnYOWNWBh4F1CFhFKKojatmx/jY+E2RRWK+KSrm9ycHF//iceHO7tal5hM3tGLDyAkIIVAY+0maxUBjYApDYSwOOgdulqMxXwOAbjKPzk9GUPc315bLTWWZo2mNs69hzhOvIAjKC3A72Q4HOAj+9zUnp5fIG6uzm2WTdFP+si/ZkgGqRcTY4zPKpKo6sbnfjJAsZj79+l0BsmfSbEocHQ8Ql2V0Fq5LmIfNKaYz8x5nvsckEHIKJZLX1z95AC/kTRNN1rpullXNdyab9FKI3JBQvu1EwVCjVBLdgwCwSRQumm1aRsJ6/b5Ly4vzvYKInc23l4n+zv4DTtoj0pUpHzuZMD5hoUMBMNOBmx3Hyt3+DoZhJ3g+Wib8e507oBRltXOto7Ho24GvJVcNHbACGTuXnQy4MhcNGbGdhrAN5b0ly21yuFfAAAAAElFTkSuQmCC\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/chatimg.data.png\":\n/*!******************************************!*\\\n !*** ./src/dialog/imgs/chatimg.data.png ***!\n \\******************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAAwUlEQVQYV2OYPGlSV1dXcnJyRmqSqbUdQ3VNNRB5uTkJCwuLKqgxtLS0ACVVFGQ4eQUFpRUZgBxHWytOHl4oX0tLS1lZGaiYkZOXW1CUQVXXGChkbGwsJSUFFGI4YM+fqycmpahqoG8AVMVwxJipUptPUFIOqEtEkJdBT4JPSVYSqBgoCTSSQUVLG8QCms/DCzI/OjrK0syEgYERaDiI7+3lHRwcDNQC5bu6ukKEgLp4RKUZsjPSgEJAfrC/t7GhHgChFSifluVS6gAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/chatimg_leg.data.png\":\n/*!**********************************************!*\\\n !*** ./src/dialog/imgs/chatimg_leg.data.png ***!\n \\**********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEOSURBVChTVY+7SgNBFIZnZ3aTWdCYddVcRBIVREEC2gcsFnwMO9/JxsrGzkbQB1AkleArWJjLXhRhJnNbf9ltcviL/3z/nDMzXjI+Hx0PDoadh6dJI6DGOUKIT6kPenZ6eHv/fDTo7vbbRSF5GCCjoDd3j/v9rThel0sLKoWG2DzN97rxdrwhlFHaCqGNdRAF7e1EUhlrHIQl1sAbGjb/N1aFXgqptYEoD3nx/Yu+QvURXI6+tqtFPcpru1os3my5oBX6tgaEaOtcWbKmTywJGF+rMlA8Cgm9vkry+ed0luXLxo9Q+I12JcSGvc7F+ORt8oE5a32pvEositqeI5fJ6OX1/Ws2TbNFUWR5nv4B2LeYEU2WizoAAAAASUVORK5CYII=\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/chatimgactive.data.png\":\n/*!************************************************!*\\\n !*** ./src/dialog/imgs/chatimgactive.data.png ***!\n \\************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAApklEQVQYV2Po6upqaWmJjo4CIk1dQ4ZiMLCzNGVgYGQRkGCorqmOjggTEeQF8hm4BRmCg4ONDfVAHAhfWVlZWFgYygciKUVVSVkFoCgnD1jLHkOGZHlWbkFRoBCIf0CdIV+GgZGTF6pLnoNBkJcLqhiIBCXloCwgAprv7eWtraGG4FtZWXq5OQG1QPnGxsaurq5AIRCfhYshKTYKqASoy83RRkVBBgAFhh2w1olrrAAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/chatimgactive_leg.data.png\":\n/*!****************************************************!*\\\n !*** ./src/dialog/imgs/chatimgactive_leg.data.png ***!\n \\****************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEESURBVChTPY4xTgMxEEXtmfFmE1hpRSQECqIIVRBCEanpuABnyImo09FzASokjgAVVUQBURpCSMiKHdt8ZwVf1mj8/veM7dXlxbBfnvTad4/vmSMNwRgjRAJ6fno4uX3IssA5k5KV5BHozeQedK9s5bm0dwmVmfh1OisLAa3rEJV8DCFE7wOBFjsO1AbGBAg0jerkDNTQSL6hyRDrfIjN5f8RRPpjmCw6NEhgjakdKknWJGCnhFj8yKDSfK7IQla2/p+46LBRaTkiNlETwvoYDY2vBx/V6m2x2u5IpxH3j4+Gg4Pnl1mluvSi335TBRwuu/vO+NFZ72m6+FxvlnW99v5L9ReDbXkhpJVqYwAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/chatimghover.data.png\":\n/*!***********************************************!*\\\n !*** ./src/dialog/imgs/chatimghover.data.png ***!\n \\***********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAAz0lEQVQYV2M4dfLEjp07W1pamhrrnL38GFavXr10yeKk2ChhYWEpFW2GLVu2dLQ1a2uocfIKiipoMABVRoaFcPLwcguKiiqoMVhZWRob6kmKCgGFBMSkGUztnU2t7VxdXZWVlYFCDP9DhSfbyaloaQMVSklJMfz3YF1sJSylqKqlpQW0gsFOQVhLTRnC4RGVZjAyBymDma/BUF1T7e3lzcDACJQUlFZkSE5OLsjNAmoByoP4YZGR2RlpQCGgLpD+Sb2d0dFR2dnZQC8Y6WkBAPN1NR2AAHfmAAAAAElFTkSuQmCC\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/chatimghover_leg.data.png\":\n/*!***************************************************!*\\\n !*** ./src/dialog/imgs/chatimghover_leg.data.png ***!\n \\***************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEjSURBVChTVc89SwNBEIDh2727fChqFosQLExMY4gIsbOIBLT0B9joX9RKTCOksLESSa1Y5TSa+8rdze7s7jl4lfAUw7sMy7CL8cnx4f5Bt3338FzzubbWcRyPc4/q6Kg/nT7eXA72erurz2xHNCBXnOrt/ex01G2JjSwq6nUeh5Ci67ISR30x7DVXqQVAkmegC+BUOx3xFhilNEmTQgIS3qh79JtWOksKkudQ4TXPWyxCpXWSAQGpK3wZrmmDJqn+4VSryRgkIFXF3doUvldyVtJlf8c5gFbbkh5qa822mz5FUBYRpTJaG359dRYE3/OPKEpgncu0MBJtCMztdtqT8eDl9V0xP0cXFe05BktXiBazzvlkOHuaB8vVVxj/xOkySn4BoaPZbEW+44oAAAAASUVORK5CYII=\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/continueimg.data.png\":\n/*!**********************************************!*\\\n !*** ./src/dialog/imgs/continueimg.data.png ***!\n \\**********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAABTklEQVRIS72PMUsDQRCFB2Jjk85KsPEPmMYmgig2gWAlKWwCIiIihIC1WIpiJZY2SpqgpLCQNDZRAjZWHqmvsVEQ1Ebl8J0D4zIXD5HdgY/lzey7fffoeVD9fFxikpfaP/jLhxLhojy+kPdRjZKokhIvBieqIC+6WcVpkfjdiz5u55P7BR6CgqDu2dbeaQdnGpoxeAcpaT0buBsD/XQ1pwwhoPde2YDX/oxbTxpir5x+sasXt8vZhm/9knL6hR5OJm0YHI2D9c1GdeWH7sG0svmF4uMJA7jbbnPW7YaR98rsC7xMHGBAttvd/pjyeIeQYcD1TtGtB42N8oSAettFBnkgR+SPEIxaytVlc5Qb4oQG7q37FSOjMiibQjwMcZIBnY0RcNiYYqFuA0GtOl0s0/laYSj4D6XdjSBLCLENdQru7W9OeUpGhsd8YGvV6Qu6U2ehlR3eegAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/continueimg_leg.data.png\":\n/*!**************************************************!*\\\n !*** ./src/dialog/imgs/continueimg_leg.data.png ***!\n \\**************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAASPSURBVEhLrVZLaFxVGD7nPubeO5NMZpIQTYfaNn2RREsrbQXbuOnKR4WCiKtCV2JABF24qTvdCK5ciIWudeFCqkuLC6WKQqVmEVsMjUkTyySTec993+t37n/n5CZNShQ/Dof/db7z/efce2f4J+++PDbqsgz0sN2y9a7NYResmIKPgTVgptY26IOpwViz0cnFdur04XFrqJDw64OargZ+ODKQJPaAWr1td5zs1lq+pKpmztBzYaPWYcxvV9cN/v7sa4cr1ulzz6Oitv7As0OqBnzH6ThRr1VPfcbyxfKAqeimWRotwe1126hHGWW3Fft2jwzdyn/42U2ygatvXaAU4iAsl/KwiQTMoqK/deymbNwoY95oBiZvJwGhhAzSk7PUbr1brdZkCkoWVmzR3jOT+1p+Keita/nRRnVpYEDs1+n0YGAWHAkCvVwyXGyw3lbhbstKtBylaEbNFg4wxRc3bn19fSaf97hy5O8H9y6/9+vrLz2naoIE4Lki6skmZJmJTQZB67DCE0XxZFEKcZKdlKdAcHhIm5tfFe1V9o1hJapjrxUG4vZ8P8BsWgZmx3Z1XYMaMihFoDgMpMjFTJVBIMo0TYPxzfd3Pv/giFUq5y02NHKMOnxxZpoKABgAtiMeLKGgNAjZOGbYMGSQXMsySRKaWlmtpu3B6rS7iEpIIkC6j4JIUycDCnp++qjf/PmPj9/cPzRmjIyXZYcXzhxmqo5sTk9vcjdInj0ChNPTRxcWltXzZ6YUzpuNtud5UQZJXwEMWkBBx/U5Z4qiUFDWIEKGBLKbmkJ/ojJ87cbiC5OFKPYVtTf65LFzx/Offjk3MT7EFDWMYjlUNSUHwEDB1N8zsAQaOp2uaM80crWaeIkl3W7DdV0ehX4Y+0GIIYK+F8YctpS1RVPoszhygwjuU+Pl69/+9cYrxcDrdZvL+4+ffPrg4LWvfhcdxhGaTFYLZXJQ5L+hULAcx+XvXLnIrOFWdVlIAZKnZRvQVWrtAsMQbymBig1NdIvGkpjAj7/d/2h2Csbd+bWV9bXbS2a96Zw/dYgqBR7dGpIQ3F3YYzA2NtyoN9WTkwcCp92znfTM+tB4LA4VZ5/5lmSBWwtjRoNF6SqAsqCy/UgW/HRn8erlibxqz99tNZuL9Vb050N29sRBVeG0r6bgoe+/gaGPTUEFBi/ZnYRJSZuVu0M8nVGknjhaCYMgK4UG1KMIvJiznciRxbYURIvlUcC4gvmXuaW3Xy2xwL2/EqG3jY5+a8E4PVXhDI1FIcQmTW4eaHLnJCBLLiUlxyiQLsmcCzEggs+4aO/U5IG2GwoplMCAJiru824BVVJNfxUuD5McUdKVyCMes9W19nihttFouW4Dvf1wL4fekEWK40sV480UTSIC6fKgd4SUhBMRLt180qS48MSliO/hNDi/cmmGVv5fwNnL14nuweT2d7cfwiga4n/Z2elDIpfAiS3MKCBj8z38lyiqvpP5DyjBZy8+qxs5WGEURH76JVB0sY2q7PxbtyOwnAwiIQbp7hFy1Y4QVKrNQnEQBNRnRWrGFsGBG/wD9kSQTvgpZ/YAAAAASUVORK5CYII=\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/continueimgdown.data.png\":\n/*!**************************************************!*\\\n !*** ./src/dialog/imgs/continueimgdown.data.png ***!\n \\**************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAABMklEQVRIS92VoU4DQRCG5wKGNyEo3gB1BtWEYGqaNAGBoQ3BoAiqKVXwDJUEgcAgCQIUBoPgVfg2/2WzGUpqdk40+XqZ3Z3u3Le32bXbQbMc2UaCmj2cbr1dWTSvl4mXC3s82+appsupDmqp3ueNRaN6s+nBaHzCU82Pa59WF9TSihJ9zex7EQgl7s/3cRPEcqNuUGkmRy2tohsIotSTIW/gcurS6f3c9QFf6a8hL+HSKoJatznzPsm7pWyu7FlL+RfmZzdS73BwtNseZ56nOyq9dv6VCerMQwSKZZS+Xj9Hi9wmw73SjSadcQdMOlr4qUYczP+fm3D5VWDapNfPvQelHjE7xyVUJ9173O66ZKNhLWUoNzcaAWqd3vsknFxSgRutjmrZvG34iE9D2zCQmrfNLxl9slarbU3QAAAAAElFTkSuQmCC\")\n\n/***/ }),\n\n/***/ \"./src/dialog/imgs/continueimgdown_leg.data.png\":\n/*!******************************************************!*\\\n !*** ./src/dialog/imgs/continueimgdown_leg.data.png ***!\n \\******************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports=(__webpack_require__(/*! alt1/base */ \"alt1/base\").ImageDetect.imageDataFromBase64)(\"iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAQQSURBVEhL1VW9bxxFFN/52NvbO59sEic5GZMIEHFkAiICKaRDAlGAlJKGioqShpqejn+ABiEoqFIhkIJEk44miSCRyIcSJXawfT6f7253dueD39xbz62/Ekei4ae5pzdv3rz3fm9m59jHb780N5tFu1GWttKOgDjmlXY4DgsY9nKRQkppaAqkup3JUTXZh0IViFlP3UgalTZZhexvpezyu6ePH4u73QXMc+15ltZBxpxBscNxVnhXQtpo8JkWlljccGVlJ394QpKzZSl3WaZYmjiSV69PO/j+mymMUGCHZ+eFhOwEBIek1GQJGJUCYUlHJaRQPVCwZdTrBzsq2eiVnt7phZOYb6u8HRuEoOWAEBGlkKLyPGk2SQ+AkchU8x2oTP/xoPj2m8+gt9qdR3/f/PLr395alILzJJXkQ6CYSBcShR7VU0PCk5ZI7yRNFF9f8l1Lmg8e/yOWFmfjNM1LheWssEbrPWM0NI4Jbdh4O4+YhTTaqrzAwJR8yAg3X8KEUlHosjTWOGPt6sBeXErKfOzc+MTi2UvL7e9+vjPfjIyxlY9GHEvRkI4iI2ae+yWEhU4ZyRMKLZG+PRyHJWxEqb4qFuWZ8vSSpgQ31EQeewbKrSuT+iuQPRjrU+f8jYU0pTs1w3+8+vDCa3NWS602uy8vg+H3v9ydSyxzzBgXce8Jqhi4+BTKR5zAx7QWDkcBBcFIW8lokHt60CaHsKv0A4E0lP6ZgJsu8AFV02Mtd+Xa6jtLLYbuqhEx/OHXe2COVbhhcOEj1+MTK1ggyYIrHfSnA46jceHpzXQ6w8GuNyrEreuFMigCzQ79BgGaCjl9waad3uFWWv8ezrejK9fWPnpvCXdyfWXtzLnzyy+qn35fIYYAMUSiEKGyOxdYOc3wRWJa54wLQg2iwSMhJJMxz7LS/zHMd2cHm0NUD9dGIlgZafQpjrwirDRcTep7CrCLFGzZ70z0bq1FX31+yfLW9b/+XF/Zunl/Y6DSN07teskEF/TaoIBIVO1BAZAuppkHshBghE4y1EyeeLe2+8rTQ3HErQ7KhD349ivT84OIAeD2xScXoNy7/2R9q9/rjWE5dwJ/A1N6CRfTth6UN5QEWad0GEBKnDk+I7kIBx0Ai8HvaBf9MDSUKSy73Ys+/fDVXJnV1R644Q27sWLOzk3uEm4a27nYjKNuYyOc2oE9nZbEOPbS4Yb+gC3zD6cfkYiaPFZai1dOdmod/C+Bo5PGlYxt5FFHqs3+AO83/Q2CGwF/JYEe1Q3lmfeFh45gl/W3GJRwkuCFgTVM8YXjr51dfr0rW3v/o+sXnUB3GvJ5QZ/ijSdeaq2llPXvDRey0nYQsoQaKHXQgf3l4awqrYZBlrMPzi+00IH/P/Yf0iAr/gXJh0N13Pe/YwAAAABJRU5ErkJggg==\")\n\n/***/ }),\n\n/***/ \"./src/dialog/index.ts\":\n/*!*****************************!*\\\n !*** ./src/dialog/index.ts ***!\n \\*****************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst a1lib = __importStar(__webpack_require__(/*! alt1/base */ \"alt1/base\"));\nconst OCR = __importStar(__webpack_require__(/*! alt1/ocr */ \"alt1/ocr\"));\nconst base_1 = __webpack_require__(/*! alt1/base */ \"alt1/base\");\nvar imgs_rs3 = (0, base_1.webpackImages)({\n chatimg: __webpack_require__(/*! ./imgs/chatimg.data.png */ \"./src/dialog/imgs/chatimg.data.png\"),\n chatimghover: __webpack_require__(/*! ./imgs/chatimghover.data.png */ \"./src/dialog/imgs/chatimghover.data.png\"),\n chatimgactive: __webpack_require__(/*! ./imgs/chatimgactive.data.png */ \"./src/dialog/imgs/chatimgactive.data.png\"),\n continueimg: __webpack_require__(/*! ./imgs/continueimg.data.png */ \"./src/dialog/imgs/continueimg.data.png\"),\n continueimgdown: __webpack_require__(/*! ./imgs/continueimgdown.data.png */ \"./src/dialog/imgs/continueimgdown.data.png\"),\n boxtl: __webpack_require__(/*! ./imgs/boxtl.data.png */ \"./src/dialog/imgs/boxtl.data.png\"),\n boxtr: __webpack_require__(/*! ./imgs/boxtr.data.png */ \"./src/dialog/imgs/boxtr.data.png\")\n});\nvar imgs_leg = (0, base_1.webpackImages)({\n chatimg: __webpack_require__(/*! ./imgs/chatimg_leg.data.png */ \"./src/dialog/imgs/chatimg_leg.data.png\"),\n chatimghover: __webpack_require__(/*! ./imgs/chatimghover_leg.data.png */ \"./src/dialog/imgs/chatimghover_leg.data.png\"),\n chatimgactive: __webpack_require__(/*! ./imgs/chatimgactive_leg.data.png */ \"./src/dialog/imgs/chatimgactive_leg.data.png\"),\n continueimg: __webpack_require__(/*! ./imgs/continueimg_leg.data.png */ \"./src/dialog/imgs/continueimg_leg.data.png\"),\n continueimgdown: __webpack_require__(/*! ./imgs/continueimgdown_leg.data.png */ \"./src/dialog/imgs/continueimgdown_leg.data.png\"),\n boxtl: __webpack_require__(/*! ./imgs/boxtl_leg.data.png */ \"./src/dialog/imgs/boxtl_leg.data.png\"),\n boxtr: __webpack_require__(/*! ./imgs/boxtr_leg.data.png */ \"./src/dialog/imgs/boxtr_leg.data.png\")\n});\nvar fontmono = __webpack_require__(/*! ../fonts/aa_8px_mono.fontmeta.json */ \"./src/fonts/aa_8px_mono.fontmeta.json\");\nvar fontheavy = __webpack_require__(/*! ../fonts/aa_8px_mono_allcaps.fontmeta.json */ \"./src/fonts/aa_8px_mono_allcaps.fontmeta.json\");\nclass DialogReader {\n constructor() {\n this.pos = null;\n }\n find(imgref) {\n if (!imgref) {\n imgref = a1lib.captureHoldFullRs();\n }\n if (!imgref) {\n return null;\n }\n var boxes = [];\n for (let imgs of [imgs_rs3, imgs_leg]) {\n var pos = imgref.findSubimage(imgs.boxtl);\n for (var a in pos) {\n var p = pos[a];\n if (imgref.findSubimage(imgs.boxtr, p.x + 492, p.y, 16, 16).length != 0) {\n boxes.push(Object.assign(Object.assign({}, p), { legacy: imgs == imgs_leg }));\n }\n }\n }\n if (boxes.length == 0) {\n return false;\n }\n var box = boxes[0];\n if (boxes.length > 1) {\n console.log(\"More than one dialog box found\");\n }\n this.pos = { x: box.x + 1, y: box.y + 1, width: 506, height: 130, legacy: box.legacy };\n return this.pos;\n }\n ensureimg(imgref) {\n if (!this.pos) {\n return null;\n }\n if (imgref && a1lib.Rect.fromArgs(imgref).contains(this.pos)) {\n return imgref;\n }\n return a1lib.captureHold(this.pos.x, this.pos.y, this.pos.width, this.pos.height);\n }\n read(imgref) {\n imgref = this.ensureimg(imgref);\n if (!imgref) {\n return false;\n }\n let title = this.readTitle(imgref);\n var r = {\n text: null,\n opts: null,\n title\n };\n if (this.checkDialog(imgref)) {\n r.text = this.readDialog(imgref, true);\n return r;\n }\n else {\n var opts = this.findOptions(imgref);\n if (opts.length != 0) {\n r.opts = this.readOptions(imgref, opts);\n return r;\n }\n else {\n return null;\n }\n }\n }\n readTitle(imgref) {\n if (!this.pos) {\n throw new Error(\"position not found yet\");\n }\n var buf = imgref.toData(this.pos.x, this.pos.y, this.pos.width, 32);\n //somehow y coord can change, 19 for \"choose and option:\" 18 for npc names\n var pos = OCR.findChar(buf, fontheavy, [255, 203, 5], Math.round(this.pos.width / 2) - 10, 16, 20, 4);\n if (!pos) {\n return \"\";\n }\n var read = OCR.readSmallCapsBackwards(buf, fontheavy, [[255, 203, 5]], Math.round(this.pos.width / 2) - 10, pos.y, 150, 1);\n return read.text.toLowerCase(); //normalize case since we don't actually know the original\n }\n checkDialog(imgref) {\n if (!this.pos) {\n throw new Error(\"position not found yet\");\n }\n var locs = [];\n let imgs = (this.pos.legacy ? imgs_leg : imgs_rs3);\n locs = locs.concat(imgref.findSubimage(imgs.continueimg, this.pos.x - imgref.x, this.pos.y - imgref.y, this.pos.width, this.pos.height));\n locs = locs.concat(imgref.findSubimage(imgs.continueimgdown, this.pos.x - imgref.x, this.pos.y - imgref.y, this.pos.width, this.pos.height));\n return locs.length != 0;\n }\n readDialog(imgref, checked) {\n if (!this.pos) {\n throw new Error(\"position not found yet\");\n }\n imgref = this.ensureimg(imgref);\n if (!imgref) {\n return null;\n }\n if (!checked) {\n checked = this.checkDialog(imgref);\n }\n if (!checked) {\n return null;\n }\n var lines = [];\n var buf = imgref.toData(this.pos.x, this.pos.y + 33, this.pos.width, 80);\n for (var y = 0; y < buf.height; y++) {\n var hastext = false;\n for (var x = 200; x < 300; x++) {\n var i = x * 4 + y * 4 * buf.width;\n if (buf.data[i] + buf.data[i + 1] + buf.data[i + 2] < 50) {\n hastext = true;\n break;\n }\n }\n if (hastext) {\n var chr = null;\n chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 192, y + 5, 12, 3);\n chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 246, y + 5, 12, 3);\n chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 310, y + 5, 12, 3);\n if (chr) {\n var read = OCR.readLine(buf, fontmono, [0, 0, 0], chr.x, chr.y, true, true);\n if (read.text.length >= 3) {\n lines.push(read.text);\n }\n y = chr.y + 5;\n }\n }\n }\n return lines;\n }\n findOptions(imgref) {\n var locs = [];\n if (!this.pos) {\n throw new Error(\"position not found yet\");\n }\n let imgs = (this.pos.legacy ? imgs_leg : imgs_rs3);\n var a = imgref.findSubimage(imgs.chatimg);\n for (var b in a) {\n locs.push({ x: a[b].x, y: a[b].y, hover: false, active: false });\n }\n var a = imgref.findSubimage(imgs.chatimghover);\n for (var b in a) {\n locs.push({ x: a[b].x, y: a[b].y, hover: true, active: false });\n }\n var a = imgref.findSubimage(imgs.chatimgactive);\n for (var b in a) {\n locs.push({ x: a[b].x, y: a[b].y, hover: false, active: true });\n }\n return locs;\n }\n readOptions(imgref, locs) {\n imgref = this.ensureimg(imgref);\n if (!imgref) {\n return null;\n }\n if (!this.pos) {\n throw new Error(\"interface not found\");\n }\n var buf = imgref.toData();\n if (!locs) {\n locs = this.findOptions(imgref);\n }\n var bgcol = [150, 135, 105];\n var fontcol = this.pos.legacy ? [255, 255, 255] : [174, 208, 224];\n var r = [];\n for (var a = 0; a < locs.length; a++) {\n var dx = locs[a].x + 30;\n var dy = locs[a].y + 6;\n var checkline = imgref.toData(dx, dy, Math.min(500, imgref.width - a), 1);\n var row = null;\n for (var x = 0; x < checkline.width; x++) {\n var i = x * 4;\n if (row) {\n if (coldiff(checkline.data[i], checkline.data[i + 1], checkline.data[i + 2], bgcol[0], bgcol[1], bgcol[2]) < 75) {\n row.width = x + 20;\n break;\n }\n }\n else if (coldiff(checkline.data[i], checkline.data[i + 1], checkline.data[i + 2], fontcol[0], fontcol[1], fontcol[2]) < 100) {\n var text = \"\";\n var chr = OCR.findChar(buf, fontmono, fontcol, dx + x + 2 - imgref.x, dy + 3 - imgref.y, 30, 1);\n if (chr) {\n var read = OCR.readLine(buf, fontmono, fontcol, chr.x, chr.y, true, true);\n var text = read.text;\n }\n row = { text: text, x: dx + x, y: dy, width: 200, buttonx: dx - 31, hover: !!locs[a].hover, active: locs[a].active };\n }\n }\n if (row) {\n r.push(row);\n }\n }\n r.sort((a, b) => a.y - b.y);\n return r;\n }\n}\nexports[\"default\"] = DialogReader;\n//TODO get rid of this or make it standard\nfunction coldiff(r1, g1, b1, r2, g2, b2) {\n return Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);\n}\n\n\n/***/ }),\n\n/***/ \"alt1/base\":\n/*!**************************************************************************************************!*\\\n !*** external {\"root\":\"A1lib\",\"commonjs2\":\"alt1/base\",\"commonjs\":\"alt1/base\",\"amd\":\"alt1/base\"} ***!\n \\**************************************************************************************************/\n/***/ ((module) => {\n\n\"use strict\";\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_alt1_base__;\n\n/***/ }),\n\n/***/ \"alt1/ocr\":\n/*!*********************************************************************************************!*\\\n !*** external {\"root\":\"OCR\",\"commonjs2\":\"alt1/ocr\",\"commonjs\":\"alt1/ocr\",\"amd\":\"alt1/ocr\"} ***!\n \\*********************************************************************************************/\n/***/ ((module) => {\n\n\"use strict\";\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_alt1_ocr__;\n\n/***/ }),\n\n/***/ \"./src/fonts/aa_8px_mono.fontmeta.json\":\n/*!*********************************************!*\\\n !*** ./src/fonts/aa_8px_mono.fontmeta.json ***!\n \\*********************************************/\n/***/ ((module) => {\n\n\"use strict\";\nmodule.exports = JSON.parse('{\"chars\":[{\"width\":7,\"bonus\":75,\"chr\":\"a\",\"pixels\":[0,7,187,1,3,221,1,6,170,1,8,255,2,3,255,2,5,187,2,8,255,3,3,255,3,5,255,3,8,221,4,4,238,4,5,255,4,6,204,4,7,255,4,8,238],\"secondary\":false},{\"width\":7,\"bonus\":105,\"chr\":\"b\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,204,1,4,170,1,7,170,1,8,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,170,4,4,170,4,7,170,5,5,187,5,6,187],\"secondary\":false},{\"width\":7,\"bonus\":50,\"chr\":\"c\",\"pixels\":[0,5,170,0,6,187,1,4,187,1,7,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,221,4,8,221],\"secondary\":false},{\"width\":7,\"bonus\":105,\"chr\":\"d\",\"pixels\":[0,5,187,0,6,187,1,4,170,1,7,170,1,8,170,2,3,255,2,8,255,3,3,255,3,8,255,4,3,204,4,4,170,4,7,170,4,8,187,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,221,5,7,221,5,8,204],\"secondary\":false},{\"width\":7,\"bonus\":75,\"chr\":\"e\",\"pixels\":[0,5,187,0,6,170,1,4,187,1,5,255,1,7,204,2,3,255,2,5,255,2,8,255,3,3,255,3,5,255,3,8,255,4,3,187,4,5,255,4,8,221,5,5,204],\"secondary\":false},{\"width\":4,\"bonus\":50,\"chr\":\"f\",\"pixels\":[0,3,204,1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204,2,1,255,2,3,255],\"secondary\":false},{\"width\":7,\"bonus\":115,\"chr\":\"g\",\"pixels\":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,170,1,11,153,2,3,255,2,8,255,2,11,238,3,3,255,3,8,255,3,11,221,4,3,221,4,7,153,4,8,221,4,10,204,5,3,204,5,4,221,5,5,221,5,6,221,5,7,221,5,8,221,5,9,170],\"secondary\":false},{\"width\":7,\"bonus\":90,\"chr\":\"h\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,170,1,4,204,2,3,255,3,3,255,4,3,170,4,4,221,4,5,221,4,6,221,4,7,221,4,8,204],\"secondary\":false},{\"width\":3,\"bonus\":35,\"chr\":\"i\",\"pixels\":[0,1,238,0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204],\"secondary\":false},{\"width\":4,\"bonus\":50,\"chr\":\"j\",\"pixels\":[0,11,153,1,11,170,2,1,204,2,3,204,2,4,221,2,5,221,2,6,221,2,7,221,2,8,221,2,9,221],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"k\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,4,153,2,5,255,2,6,221,3,3,204,3,7,221],\"secondary\":false},{\"width\":3,\"bonus\":40,\"chr\":\"l\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,1,8,255],\"secondary\":false},{\"width\":10,\"bonus\":115,\"chr\":\"m\",\"pixels\":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,153,4,4,255,4,5,221,4,6,221,4,7,221,4,8,204,5,4,187,6,3,255,7,3,238,8,4,170,8,5,221,8,6,221,8,7,221,8,8,204],\"secondary\":false},{\"width\":7,\"bonus\":75,\"chr\":\"n\",\"pixels\":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,238,5,4,170,5,5,221,5,6,221,5,7,221,5,8,204],\"secondary\":false},{\"width\":8,\"bonus\":70,\"chr\":\"o\",\"pixels\":[0,5,187,0,6,170,1,4,204,1,7,221,2,3,238,2,8,238,3,3,255,3,8,255,4,3,238,4,8,255,5,4,204,5,7,221,6,5,170,6,6,170],\"secondary\":false},{\"width\":6,\"bonus\":90,\"chr\":\"p\",\"pixels\":[0,3,238,0,4,255,0,5,187,0,6,204,0,7,255,0,8,221,0,9,221,0,10,221,1,3,255,1,8,238,2,3,255,2,8,255,3,3,238,3,8,238,4,4,238,4,5,255,4,6,255,4,7,238],\"secondary\":false},{\"width\":7,\"bonus\":90,\"chr\":\"q\",\"pixels\":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,153,1,8,170,2,3,255,2,8,255,3,3,238,3,8,238,4,3,255,4,4,255,4,5,187,4,6,187,4,7,255,4,8,238,4,9,221,4,10,221],\"secondary\":false},{\"width\":4,\"bonus\":45,\"chr\":\"r\",\"pixels\":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,187,1,4,204,2,3,255],\"secondary\":false},{\"width\":6,\"bonus\":50,\"chr\":\"s\",\"pixels\":[0,4,187,1,3,255,1,5,238,1,8,255,2,3,255,2,8,255,3,3,255,3,6,238,3,8,255,4,7,187],\"secondary\":false},{\"width\":5,\"bonus\":45,\"chr\":\"t\",\"pixels\":[1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,170,2,3,255,2,8,238,3,8,153],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"u\",\"pixels\":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,170,1,8,238,2,8,255,3,8,204,4,3,204,4,4,221,4,5,221,4,6,204,4,7,255,4,8,221],\"secondary\":false},{\"width\":6,\"bonus\":50,\"chr\":\"v\",\"pixels\":[0,3,238,1,5,238,1,6,204,2,7,255,2,8,255,3,5,153,3,6,255,3,7,153,4,3,238,4,4,204],\"secondary\":false},{\"width\":10,\"bonus\":95,\"chr\":\"w\",\"pixels\":[1,3,153,1,4,238,1,5,187,2,6,153,2,7,238,2,8,187,3,6,204,3,7,238,3,8,153,4,3,170,4,4,255,5,4,221,5,5,221,6,7,255,6,8,221,7,6,238,7,7,204,8,3,238,8,4,204],\"secondary\":false},{\"width\":6,\"bonus\":55,\"chr\":\"x\",\"pixels\":[0,8,170,1,3,170,1,4,204,1,7,221,2,5,255,2,6,238,3,4,255,3,6,187,3,7,187,4,3,221,4,8,255],\"secondary\":false},{\"width\":6,\"bonus\":65,\"chr\":\"y\",\"pixels\":[0,3,255,0,4,153,0,11,221,1,5,204,1,6,221,1,11,187,2,7,187,2,8,255,2,9,238,3,6,238,3,7,187,4,3,204,4,4,221],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"z\",\"pixels\":[0,3,153,0,8,204,1,3,255,1,7,221,1,8,255,2,3,255,2,6,255,2,8,255,3,3,255,3,4,170,3,5,170,3,8,255,4,3,255,4,8,255],\"secondary\":false},{\"width\":8,\"bonus\":85,\"chr\":\"A\",\"pixels\":[0,8,153,1,6,221,1,7,238,2,3,170,2,4,255,2,5,187,2,6,255,3,1,255,3,2,255,3,6,255,4,2,255,4,3,238,4,6,255,5,5,255,5,6,255,6,7,187,6,8,255],\"secondary\":false},{\"width\":7,\"bonus\":125,\"chr\":\"B\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,4,255,1,8,255,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,1,221,4,4,255,4,5,170,4,8,204,5,2,170,5,3,170,5,6,187,5,7,153],\"secondary\":false},{\"width\":9,\"bonus\":80,\"chr\":\"C\",\"pixels\":[0,4,187,0,5,187,1,2,221,1,3,153,1,6,153,1,7,204,2,1,170,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,170,6,8,170],\"secondary\":false},{\"width\":8,\"bonus\":100,\"chr\":\"D\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,8,255,2,1,255,2,8,255,3,1,255,3,8,255,4,1,204,4,8,204,5,2,221,5,7,221,6,4,187,6,5,187],\"secondary\":false},{\"width\":6,\"bonus\":95,\"chr\":\"E\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,1,8,255,2,1,255,2,5,255,2,8,255,3,1,255,3,5,255,3,8,255,4,1,153,4,8,221],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"F\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255],\"secondary\":false},{\"width\":9,\"bonus\":105,\"chr\":\"G\",\"pixels\":[0,4,170,0,5,187,1,2,204,1,3,153,1,7,221,2,1,170,2,8,187,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,238,6,1,170,6,5,255,6,7,153,6,8,170,7,5,153,7,6,221,7,7,221,7,8,204],\"secondary\":false},{\"width\":8,\"bonus\":105,\"chr\":\"H\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,5,255,3,5,255,4,5,255,5,5,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],\"secondary\":false},{\"width\":4,\"bonus\":60,\"chr\":\"I\",\"pixels\":[0,1,192,0,8,191,1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,2,1,192,2,8,191],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"J\",\"pixels\":[0,6,153,0,7,153,1,8,204,2,1,221,2,8,255,3,1,255,3,8,204,4,1,204,4,2,221,4,3,221,4,4,221,4,5,221,4,6,221,4,7,153],\"secondary\":false},{\"width\":7,\"bonus\":85,\"chr\":\"K\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,255,2,4,255,3,3,221,3,5,170,3,6,204,4,1,204,4,2,153,4,7,238,4,8,153],\"secondary\":false},{\"width\":6,\"bonus\":60,\"chr\":\"L\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,8,255,2,8,255,3,8,255,4,8,255],\"secondary\":false},{\"width\":9,\"bonus\":130,\"chr\":\"M\",\"pixels\":[0,1,245,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,1,2,170,1,3,225,2,4,207,2,5,190,3,6,232,4,6,232,5,4,207,5,5,190,6,2,170,6,3,224,7,1,245,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255],\"secondary\":false},{\"width\":8,\"bonus\":110,\"chr\":\"N\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,2,255,2,3,221,3,4,187,3,5,187,4,6,221,5,7,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],\"secondary\":false},{\"width\":10,\"bonus\":110,\"chr\":\"O\",\"pixels\":[0,4,187,0,5,170,1,2,204,1,3,153,1,6,170,1,7,204,2,1,153,2,8,153,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,153,6,8,153,7,2,204,7,3,153,7,6,170,7,7,204,8,4,187,8,5,170],\"secondary\":false},{\"width\":7,\"bonus\":85,\"chr\":\"P\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,4,1,187,4,5,187,5,3,221],\"secondary\":false},{\"width\":9,\"bonus\":100,\"chr\":\"Q\",\"pixels\":[0,4,187,0,5,187,1,2,221,1,6,153,1,7,221,2,1,187,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,238,5,8,238,6,2,204,6,7,255,7,3,255,7,4,204,7,5,221,7,6,255,7,8,204],\"secondary\":false},{\"width\":7,\"bonus\":100,\"chr\":\"R\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,3,6,187,4,2,238,4,3,204,4,4,255,4,7,238,4,8,170],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"S\",\"pixels\":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,1,255,2,4,170,2,8,255,3,1,255,3,5,255,3,8,255,4,1,170,4,6,221,4,7,238],\"secondary\":false},{\"width\":8,\"bonus\":65,\"chr\":\"T\",\"pixels\":[0,1,255,1,1,255,2,1,255,3,1,255,3,2,221,3,3,221,3,4,221,3,5,221,3,6,221,3,7,221,3,8,204,4,1,255,5,1,255],\"secondary\":false},{\"width\":8,\"bonus\":85,\"chr\":\"U\",\"pixels\":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,187,1,7,170,2,8,255,3,8,255,4,8,221,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,255,5,7,238],\"secondary\":false},{\"width\":7,\"bonus\":70,\"chr\":\"V\",\"pixels\":[0,1,255,0,2,187,1,3,153,1,4,255,1,5,153,2,6,187,2,7,238,3,7,255,3,8,204,4,4,204,4,5,238,5,1,170,5,2,255,5,3,153],\"secondary\":false},{\"width\":10,\"bonus\":125,\"chr\":\"W\",\"pixels\":[0,1,255,0,2,221,1,4,187,1,5,255,1,6,204,2,7,255,2,8,255,3,3,153,3,4,238,3,5,221,4,1,255,4,2,255,4,3,153,5,3,170,5,4,238,5,5,204,6,7,255,6,8,255,7,4,153,7,5,238,7,6,238,7,7,153,8,1,238,8,2,238,8,3,153],\"secondary\":false},{\"width\":7,\"bonus\":75,\"chr\":\"X\",\"pixels\":[0,8,170,1,1,187,1,2,204,1,7,238,2,3,221,2,4,153,2,5,255,2,6,153,3,4,255,3,5,238,4,2,238,4,6,204,4,7,170,5,1,204,5,8,255],\"secondary\":false},{\"width\":7,\"bonus\":55,\"chr\":\"Y\",\"pixels\":[0,1,170,1,2,238,2,3,153,2,4,255,3,4,221,3,5,204,3,6,221,3,7,221,3,8,204,4,3,255,5,1,238],\"secondary\":false},{\"width\":7,\"bonus\":75,\"chr\":\"Z\",\"pixels\":[0,8,187,1,1,255,1,7,221,1,8,255,2,1,255,2,5,204,2,8,255,3,1,255,3,4,204,3,8,255,4,1,255,4,2,221,4,8,255,5,1,187,5,8,153],\"secondary\":false},{\"width\":7,\"bonus\":90,\"chr\":\"0\",\"pixels\":[0,2,153,0,3,221,0,4,255,0,5,255,0,6,238,0,7,170,1,1,187,1,8,204,2,1,187,2,8,187,3,1,221,3,8,204,4,2,170,4,3,255,4,4,187,4,5,187,4,6,238,4,7,170],\"secondary\":false},{\"width\":7,\"bonus\":50,\"chr\":\"1\",\"pixels\":[1,8,187,2,1,204,2,2,204,2,3,187,2,4,187,2,5,187,2,6,187,2,7,187,2,8,238,3,8,204],\"secondary\":false},{\"width\":7,\"bonus\":55,\"chr\":\"2\",\"pixels\":[1,8,255,2,1,187,2,6,153,2,8,187,3,1,204,3,5,153,3,8,187,4,1,187,4,2,153,4,4,204,4,8,187],\"secondary\":false},{\"width\":7,\"bonus\":50,\"chr\":\"3\",\"pixels\":[0,8,204,1,1,187,1,8,187,2,1,187,2,4,187,2,8,204,3,2,221,3,3,204,3,5,204,3,7,170],\"secondary\":false},{\"width\":7,\"bonus\":80,\"chr\":\"4\",\"pixels\":[0,6,238,1,4,187,1,6,187,2,3,170,2,6,187,3,1,187,3,2,153,3,6,204,4,1,187,4,2,187,4,3,187,4,4,187,4,5,187,4,6,238,4,7,187,4,8,187],\"secondary\":false},{\"width\":7,\"bonus\":70,\"chr\":\"5\",\"pixels\":[1,1,238,1,2,187,1,3,187,1,4,187,1,8,204,2,1,187,2,4,187,2,8,187,3,1,187,3,4,204,3,8,204,4,5,238,4,6,187,4,7,221],\"secondary\":false},{\"width\":7,\"bonus\":80,\"chr\":\"6\",\"pixels\":[0,3,170,0,4,255,0,5,255,0,6,238,0,7,153,1,2,187,1,8,187,2,1,204,2,4,187,2,8,187,3,1,187,3,4,204,3,8,187,4,5,221,4,6,255,4,7,187],\"secondary\":false},{\"width\":7,\"bonus\":55,\"chr\":\"7\",\"pixels\":[0,1,187,1,1,187,1,8,204,2,1,187,2,6,238,2,7,153,3,1,187,3,3,153,3,4,221,4,1,255,4,2,187],\"secondary\":false},{\"width\":7,\"bonus\":95,\"chr\":\"8\",\"pixels\":[1,2,238,1,3,221,1,6,204,1,7,221,2,1,204,2,4,204,2,5,170,2,8,221,3,1,187,3,4,170,3,8,187,4,1,221,4,4,170,4,5,204,4,8,187,5,2,170,5,3,153,5,6,238,5,7,238],\"secondary\":false},{\"width\":7,\"bonus\":85,\"chr\":\"9\",\"pixels\":[1,2,221,1,3,187,1,4,238,1,8,153,2,1,204,2,5,221,2,8,187,3,1,187,3,5,187,3,8,204,4,1,187,4,7,170,5,2,153,5,3,238,5,4,255,5,5,255,5,6,187],\"secondary\":false},{\"width\":8,\"bonus\":75,\"chr\":\"%\",\"pixels\":[0,3,255,0,8,255,1,2,255,1,4,255,1,7,255,2,3,255,2,6,255,3,5,255,4,4,255,4,7,255,5,3,255,5,6,255,5,8,255,6,2,255,6,7,255],\"secondary\":false},{\"width\":4,\"bonus\":40,\"chr\":\"/\",\"pixels\":[0,7,153,0,8,238,0,9,221,1,4,187,1,5,238,1,6,170,2,1,221,2,2,221],\"secondary\":false},{\"width\":7,\"bonus\":60,\"chr\":\"+\",\"pixels\":[0,5,221,1,5,255,2,5,255,3,2,153,3,3,221,3,4,221,3,5,255,3,6,221,3,7,221,3,8,204,4,5,255,5,5,255],\"secondary\":false},{\"width\":5,\"bonus\":40,\"chr\":\"?\",\"pixels\":[0,1,170,1,1,255,1,6,221,1,8,255,2,1,255,2,5,170,3,2,255,3,3,221],\"secondary\":false},{\"width\":2,\"bonus\":35,\"chr\":\"!\",\"pixels\":[0,1,170,0,2,187,0,3,187,0,4,187,0,5,187,0,6,170,0,8,255],\"secondary\":false},{\"width\":8,\"bonus\":130,\"chr\":\"@\",\"pixels\":[0,4,255,0,5,255,0,6,221,0,7,255,0,8,187,1,3,221,1,9,238,2,2,221,2,5,255,2,6,238,2,7,255,2,10,153,3,2,255,3,4,255,3,8,204,3,10,187,4,2,238,4,4,255,4,8,255,5,3,238,5,4,255,5,5,221,5,6,221,5,7,221,5,8,238,6,8,221],\"secondary\":false},{\"width\":8,\"bonus\":120,\"chr\":\"#\",\"pixels\":[0,6,255,1,3,255,1,6,255,1,7,170,1,8,238,2,1,170,2,2,238,2,3,255,2,4,221,2,5,170,2,6,255,3,3,255,3,6,255,4,3,255,4,4,153,4,5,204,4,6,255,4,7,238,4,8,187,5,1,255,5,2,187,5,3,255,5,6,255,6,3,255],\"secondary\":false},{\"width\":6,\"bonus\":70,\"chr\":\"$\",\"pixels\":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,0,204,2,1,238,2,8,238,2,9,204,3,1,238,3,5,238,3,8,255,4,6,170,4,7,170],\"secondary\":false},{\"width\":6,\"bonus\":40,\"chr\":\"^\",\"pixels\":[0,4,153,0,5,238,1,2,204,1,3,221,2,1,221,2,2,221,3,3,187,3,4,221],\"secondary\":false},{\"width\":6,\"bonus\":20,\"chr\":\"~\",\"pixels\":[1,5,255,2,5,221,3,6,221,4,5,204],\"secondary\":false},{\"width\":7,\"bonus\":95,\"chr\":\"&\",\"pixels\":[0,6,187,1,2,238,1,3,255,1,4,187,1,5,187,1,8,187,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,4,255,4,8,187,5,3,204,5,4,255,5,5,221,5,6,187,6,4,153],\"secondary\":false},{\"width\":6,\"bonus\":45,\"chr\":\"*\",\"pixels\":[0,2,170,1,2,170,1,3,204,1,4,255,2,1,204,2,2,238,2,3,255,3,2,170,3,4,153],\"secondary\":false},{\"width\":4,\"bonus\":55,\"chr\":\"(\",\"pixels\":[0,3,173,0,4,239,0,5,253,0,6,230,0,7,171,1,1,194,1,2,204,1,8,204,1,9,191,2,0,210,2,10,216],\"secondary\":false},{\"width\":4,\"bonus\":55,\"chr\":\")\",\"pixels\":[1,0,211,1,10,216,2,1,194,2,2,203,2,8,203,2,9,191,3,3,174,3,4,240,3,5,253,3,6,229,3,7,171],\"secondary\":false},{\"width\":7,\"bonus\":30,\"chr\":\"_\",\"pixels\":[0,9,153,1,9,255,2,9,255,3,9,255,4,9,255,5,9,255],\"secondary\":false},{\"width\":4,\"bonus\":15,\"chr\":\"-\",\"pixels\":[0,5,255,1,5,255,2,5,255],\"secondary\":true},{\"width\":8,\"bonus\":50,\"chr\":\"=\",\"pixels\":[0,4,255,0,6,255,1,4,255,1,6,255,2,4,255,2,6,255,3,4,255,3,6,255,4,4,255,4,6,255],\"secondary\":false},{\"width\":3,\"bonus\":55,\"chr\":\"[\",\"pixels\":[0,0,204,0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,0,238,1,8,238],\"secondary\":false},{\"width\":3,\"bonus\":55,\"chr\":\"]\",\"pixels\":[0,0,238,0,8,238,1,0,204,1,1,221,1,2,221,1,3,221,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204],\"secondary\":false},{\"width\":5,\"bonus\":50,\"chr\":\"{\",\"pixels\":[0,5,153,1,2,170,1,3,221,1,4,221,1,5,204,1,6,255,1,7,221,1,8,170,2,1,238,2,9,238],\"secondary\":false},{\"width\":5,\"bonus\":50,\"chr\":\"}\",\"pixels\":[1,1,238,1,9,238,2,2,170,2,3,221,2,4,221,2,5,204,2,6,255,2,7,221,2,8,170,3,5,153],\"secondary\":false},{\"width\":3,\"bonus\":10,\"chr\":\":\",\"pixels\":[1,3,255,1,7,255],\"secondary\":true},{\"width\":3,\"bonus\":20,\"chr\":\";\",\"pixels\":[0,9,201,1,3,255,1,7,241,1,8,255],\"secondary\":true},{\"width\":3,\"bonus\":20,\"chr\":\"\\\\\"\",\"pixels\":[0,1,255,0,2,255,2,1,255,2,2,255],\"secondary\":true},{\"width\":2,\"bonus\":10,\"chr\":\"\\'\",\"pixels\":[0,1,255,0,2,177],\"secondary\":true},{\"width\":7,\"bonus\":40,\"chr\":\"<\",\"pixels\":[0,5,204,1,5,255,2,4,238,2,6,238,3,4,170,3,6,170,4,3,221,4,7,221],\"secondary\":false},{\"width\":7,\"bonus\":45,\"chr\":\">\",\"pixels\":[0,3,204,0,7,204,1,7,187,2,4,238,2,6,255,3,4,170,3,5,153,3,6,204,4,5,255],\"secondary\":false},{\"width\":5,\"bonus\":35,\"chr\":\"\\\\\\\\\",\"pixels\":[1,1,153,1,2,255,1,3,204,2,5,255,2,6,204,3,8,255,3,9,204],\"secondary\":false},{\"width\":2,\"bonus\":5,\"chr\":\".\",\"pixels\":[0,8,255],\"secondary\":true},{\"width\":3,\"bonus\":15,\"chr\":\",\",\"pixels\":[0,9,205,1,7,205,1,8,255],\"secondary\":true},{\"width\":3,\"bonus\":50,\"chr\":\"|\",\"pixels\":[0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,221,0,9,221,0,10,204],\"secondary\":false}],\"width\":10,\"spacewidth\":3,\"shadow\":false,\"height\":12,\"basey\":8}');\n\n/***/ }),\n\n/***/ \"./src/fonts/aa_8px_mono_allcaps.fontmeta.json\":\n/*!*****************************************************!*\\\n !*** ./src/fonts/aa_8px_mono_allcaps.fontmeta.json ***!\n \\*****************************************************/\n/***/ ((module) => {\n\n\"use strict\";\nmodule.exports = JSON.parse('{\"chars\":[{\"width\":3,\"bonus\":35,\"chr\":\"!\",\"pixels\":[0,2,170,1,1,221,1,2,255,1,3,221,1,4,187,1,5,170,1,9,204],\"secondary\":false},{\"width\":6,\"bonus\":20,\"chr\":\"\\\\\"\",\"pixels\":[1,2,221,1,3,255,3,2,221,3,3,255],\"secondary\":true},{\"width\":8,\"bonus\":125,\"chr\":\"#\",\"pixels\":[0,7,187,1,4,255,1,7,255,1,10,170,2,3,170,2,4,255,2,5,255,2,6,221,2,7,255,2,8,170,3,4,255,3,7,255,4,4,255,4,5,153,4,7,255,4,8,238,4,9,255,4,10,204,5,2,238,5,3,204,5,4,255,5,5,153,5,7,255,6,4,255,6,7,153],\"secondary\":false},{\"width\":7,\"bonus\":115,\"chr\":\"$\",\"pixels\":[0,8,187,1,2,255,1,3,255,1,4,221,1,9,238,2,1,187,2,4,255,2,5,204,2,8,170,2,9,255,2,10,221,3,0,187,3,1,238,3,2,187,3,3,170,3,4,153,3,5,255,3,6,221,3,9,221,4,1,221,4,6,255,4,7,255,4,8,255],\"secondary\":false},{\"width\":12,\"bonus\":135,\"chr\":\"%\",\"pixels\":[1,2,255,1,3,255,1,4,221,2,5,153,3,1,153,3,9,187,4,1,170,4,2,255,4,3,255,4,4,221,4,7,238,4,8,204,5,4,153,5,5,238,5,6,153,6,1,153,6,2,187,6,3,204,6,6,221,6,7,255,6,8,255,7,1,153,7,9,187,8,9,187,9,6,221,9,7,255,9,8,255],\"secondary\":false},{\"width\":11,\"bonus\":190,\"chr\":\"&\",\"pixels\":[0,6,187,0,7,255,0,8,170,1,2,204,1,3,255,1,4,153,1,5,238,1,6,170,1,7,187,1,8,255,1,9,153,2,1,170,2,2,153,2,3,153,2,4,255,2,5,187,2,9,238,3,1,221,3,5,238,3,6,170,3,9,255,4,1,238,4,6,238,4,7,153,4,9,204,5,1,187,5,2,187,5,7,255,5,8,204,6,7,170,6,8,255,7,5,238,7,6,255,7,7,170,7,8,170,7,9,221,8,9,238,9,9,153],\"secondary\":false},{\"width\":4,\"bonus\":10,\"chr\":\"\\'\",\"pixels\":[1,2,204,1,3,255],\"secondary\":true},{\"width\":4,\"bonus\":50,\"chr\":\"(\",\"pixels\":[0,3,170,0,4,238,0,5,255,0,6,221,0,7,153,1,1,153,1,2,221,1,3,153,1,7,170,1,8,238],\"secondary\":false},{\"width\":4,\"bonus\":40,\"chr\":\")\",\"pixels\":[1,1,170,1,2,221,1,7,170,1,8,238,2,3,187,2,4,238,2,5,255,2,6,204],\"secondary\":false},{\"width\":5,\"bonus\":25,\"chr\":\"*\",\"pixels\":[1,1,170,1,2,221,1,3,153,2,2,255,2,3,204],\"secondary\":false},{\"width\":8,\"bonus\":45,\"chr\":\"+\",\"pixels\":[1,6,255,2,6,255,3,4,255,3,5,255,3,6,255,3,7,255,3,8,255,4,6,255,5,6,255],\"secondary\":false},{\"width\":3,\"bonus\":10,\"chr\":\",\",\"pixels\":[1,8,187,1,9,221],\"secondary\":true},{\"width\":5,\"bonus\":20,\"chr\":\"-\",\"pixels\":[0,7,204,1,7,255,2,7,238,3,7,187],\"secondary\":true},{\"width\":3,\"bonus\":5,\"chr\":\".\",\"pixels\":[0,9,204],\"secondary\":true},{\"width\":7,\"bonus\":40,\"chr\":\"/\",\"pixels\":[0,9,221,1,7,187,1,8,187,2,6,221,3,4,221,4,2,170,4,3,187,5,1,187],\"secondary\":false},{\"width\":8,\"bonus\":105,\"chr\":\"0\",\"pixels\":[0,6,153,1,3,221,1,4,255,1,5,255,1,6,255,1,7,255,1,8,238,2,2,187,2,8,153,2,9,204,3,2,187,3,9,204,4,2,221,4,9,187,5,3,238,5,4,255,5,5,255,5,6,255,5,7,255,5,8,221,6,5,153],\"secondary\":false},{\"width\":6,\"bonus\":85,\"chr\":\"1\",\"pixels\":[1,3,170,1,9,153,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,3,2,153,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221],\"secondary\":false},{\"width\":8,\"bonus\":100,\"chr\":\"2\",\"pixels\":[1,2,187,1,3,153,1,9,255,2,2,187,2,8,221,2,9,255,3,2,221,3,7,221,3,9,255,4,2,187,4,3,238,4,4,187,4,5,238,4,6,238,4,9,255,5,3,221,5,4,255,5,5,170,5,8,153,5,9,238],\"secondary\":false},{\"width\":7,\"bonus\":100,\"chr\":\"3\",\"pixels\":[0,2,170,0,8,170,0,9,204,1,2,221,1,9,238,2,2,238,2,5,221,2,9,221,3,2,221,3,3,187,3,4,204,3,5,255,3,6,153,3,9,187,4,3,238,4,4,153,4,6,255,4,7,255,4,8,255,5,7,153],\"secondary\":false},{\"width\":8,\"bonus\":85,\"chr\":\"4\",\"pixels\":[0,7,153,1,6,187,1,7,255,2,5,187,2,7,255,3,4,187,3,7,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,7,255,5,9,204,6,7,221],\"secondary\":false},{\"width\":7,\"bonus\":95,\"chr\":\"5\",\"pixels\":[0,8,153,0,9,221,1,2,255,1,3,187,1,4,238,1,9,221,2,2,255,2,4,187,2,5,170,2,9,204,3,2,255,3,5,255,3,9,170,4,2,255,4,5,204,4,6,255,4,7,255,4,8,238,5,7,153],\"secondary\":false},{\"width\":8,\"bonus\":105,\"chr\":\"6\",\"pixels\":[0,7,153,1,4,153,1,5,255,1,6,255,1,7,255,1,8,255,2,4,204,2,9,221,3,3,170,3,5,153,3,9,204,4,2,153,4,5,187,4,9,204,5,6,238,5,7,170,5,8,187,5,9,153,6,6,187,6,7,255,6,8,170],\"secondary\":false},{\"width\":7,\"bonus\":75,\"chr\":\"7\",\"pixels\":[0,2,204,0,3,187,1,2,255,1,9,187,2,2,255,2,7,238,2,8,255,2,9,170,3,2,255,3,5,221,3,6,204,4,2,255,4,3,204,4,4,170,5,2,204],\"secondary\":false},{\"width\":8,\"bonus\":120,\"chr\":\"8\",\"pixels\":[1,3,221,1,4,204,1,6,187,1,7,255,1,8,255,2,2,187,2,4,204,2,5,221,2,6,153,2,9,221,3,2,153,3,5,255,3,9,187,4,2,187,4,5,238,4,6,204,4,9,204,5,2,170,5,3,255,5,4,238,5,6,238,5,7,255,5,8,255,6,7,153],\"secondary\":false},{\"width\":8,\"bonus\":95,\"chr\":\"9\",\"pixels\":[0,4,153,1,3,255,1,4,255,1,5,255,2,2,187,2,6,153,3,2,204,3,6,153,3,9,153,4,2,221,4,7,153,4,8,204,5,3,255,5,4,255,5,5,255,5,6,255,5,7,187,6,4,153,6,5,153],\"secondary\":false},{\"width\":3,\"bonus\":10,\"chr\":\":\",\"pixels\":[0,3,204,0,7,204],\"secondary\":true},{\"width\":3,\"bonus\":20,\"chr\":\";\",\"pixels\":[0,2,204,0,6,153,0,7,187,0,8,153],\"secondary\":true},{\"width\":7,\"bonus\":55,\"chr\":\"<\",\"pixels\":[0,6,187,0,7,153,1,6,221,1,7,238,2,5,153,3,5,238,3,8,238,4,5,153,4,8,187,5,4,187,5,9,153],\"secondary\":false},{\"width\":7,\"bonus\":60,\"chr\":\"=\",\"pixels\":[0,5,255,0,8,255,1,5,255,1,8,255,2,5,255,2,8,255,3,5,255,3,8,255,4,5,255,4,8,255,5,5,221,5,8,221],\"secondary\":false},{\"width\":7,\"bonus\":50,\"chr\":\">\",\"pixels\":[0,4,204,0,9,170,1,5,170,1,8,187,2,5,238,2,8,221,3,7,153,4,6,238,4,7,238,5,6,153],\"secondary\":false},{\"width\":6,\"bonus\":65,\"chr\":\"?\",\"pixels\":[0,2,153,0,3,187,1,2,221,1,7,221,2,2,238,2,6,238,2,10,204,3,2,204,3,3,221,3,4,204,3,5,255,4,3,238,4,4,221],\"secondary\":false},{\"width\":11,\"bonus\":180,\"chr\":\"@\",\"pixels\":[0,4,187,0,5,255,0,6,255,0,7,238,1,3,170,1,8,204,2,5,187,2,6,238,2,7,187,2,9,204,3,4,204,3,5,153,3,6,153,3,7,204,3,9,204,4,3,153,4,6,153,4,9,187,5,0,153,5,3,221,5,4,170,5,5,238,5,6,255,5,7,187,5,9,170,6,3,221,6,4,153,6,7,238,7,1,153,7,7,170,8,1,170,8,2,153,8,6,170,9,3,187,9,4,221,9,5,170],\"secondary\":false},{\"width\":9,\"bonus\":110,\"chr\":\"A\",\"pixels\":[1,9,238,2,6,153,2,7,255,2,8,170,2,9,170,3,4,187,3,5,238,3,7,221,4,2,187,4,3,255,4,4,238,4,7,221,5,4,221,5,5,255,5,6,238,5,7,238,6,6,187,6,7,255,6,8,255,6,9,187,7,8,170,7,9,255],\"secondary\":false},{\"width\":7,\"bonus\":150,\"chr\":\"B\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,255,3,2,221,3,5,221,3,9,204,4,2,187,4,3,255,4,4,255,4,5,170,4,6,255,4,7,170,4,8,187,4,9,187,5,6,153,5,7,255,5,8,204],\"secondary\":false},{\"width\":8,\"bonus\":120,\"chr\":\"C\",\"pixels\":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,3,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,221,5,2,221,5,9,221,6,2,187,6,3,187,6,8,153,6,9,170],\"secondary\":false},{\"width\":10,\"bonus\":165,\"chr\":\"D\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,9,221,4,2,238,4,9,221,5,2,221,5,9,204,6,2,153,6,3,238,6,8,187,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,8,5,187,8,6,170],\"secondary\":false},{\"width\":7,\"bonus\":110,\"chr\":\"E\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,170,2,9,239,3,2,214,3,5,221,3,9,212,4,2,212,4,5,226,4,9,238],\"secondary\":false},{\"width\":7,\"bonus\":100,\"chr\":\"F\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,2,221,3,5,221,4,2,238,4,5,238],\"secondary\":false},{\"width\":9,\"bonus\":135,\"chr\":\"G\",\"pixels\":[0,4,170,0,5,238,0,6,255,0,7,187,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,238,5,2,238,5,9,221,6,2,204,6,6,255,6,7,255,6,8,255,6,9,204,7,6,204,7,7,153,7,8,153],\"secondary\":false},{\"width\":10,\"bonus\":175,\"chr\":\"H\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,5,221,4,5,221,5,5,221,6,2,204,6,3,153,6,4,153,6,5,238,6,6,153,6,7,153,6,8,153,6,9,221,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255],\"secondary\":false},{\"width\":5,\"bonus\":80,\"chr\":\"I\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,153,2,9,221],\"secondary\":false},{\"width\":6,\"bonus\":90,\"chr\":\"J\",\"pixels\":[2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,187,3,2,204,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,153],\"secondary\":false},{\"width\":10,\"bonus\":140,\"chr\":\"K\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,187,2,7,153,2,8,153,2,9,204,3,5,238,3,6,238,4,6,170,4,7,255,5,2,238,5,3,153,5,7,170,5,8,255,6,2,204,6,8,170,6,9,238,7,9,204],\"secondary\":false},{\"width\":7,\"bonus\":95,\"chr\":\"L\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,9,221,4,9,221,5,9,204],\"secondary\":false},{\"width\":12,\"bonus\":150,\"chr\":\"M\",\"pixels\":[1,6,170,1,7,221,1,8,255,1,9,255,2,2,170,2,3,255,2,4,255,2,5,221,3,4,204,3,5,255,3,6,238,4,6,204,4,7,255,4,8,221,5,7,187,5,8,255,6,6,221,7,4,238,7,5,204,8,2,187,8,3,255,8,4,255,8,5,255,8,6,255,8,7,238,8,8,204,8,9,187,9,7,170,9,8,204,9,9,255],\"secondary\":false},{\"width\":10,\"bonus\":130,\"chr\":\"N\",\"pixels\":[1,2,204,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,3,221,2,4,238,3,4,221,3,5,238,4,5,238,4,6,238,5,6,238,5,7,238,6,7,238,6,8,238,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,204],\"secondary\":false},{\"width\":10,\"bonus\":155,\"chr\":\"O\",\"pixels\":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,170,2,8,204,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,238,6,8,170,7,3,238,7,4,255,7,5,255,7,6,255,7,7,255,7,8,187,8,4,153,8,5,221,8,6,204],\"secondary\":false},{\"width\":8,\"bonus\":130,\"chr\":\"P\",\"pixels\":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,1,238,2,2,153,2,3,153,2,4,153,2,5,170,2,6,153,2,7,153,2,8,153,2,9,221,3,1,204,4,1,238,4,5,187,5,1,153,5,2,255,5,3,255,5,4,255,6,3,153],\"secondary\":false},{\"width\":10,\"bonus\":180,\"chr\":\"Q\",\"pixels\":[0,4,153,0,5,238,0,6,238,0,7,170,1,3,221,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,8,221,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,221,6,8,153,6,9,238,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,7,9,187,7,10,153,8,4,153,8,5,204,8,6,204,8,10,255,9,10,204],\"secondary\":false},{\"width\":7,\"bonus\":140,\"chr\":\"R\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,238,2,7,153,2,8,153,2,9,221,3,2,238,3,6,238,4,2,204,4,3,204,4,4,153,4,5,204,4,6,204,4,7,255,5,3,221,5,4,221,5,8,255,6,9,238],\"secondary\":false},{\"width\":6,\"bonus\":115,\"chr\":\"S\",\"pixels\":[0,3,221,0,4,238,0,8,187,0,9,187,1,2,187,1,4,204,1,5,255,1,9,238,2,2,187,2,5,255,2,6,187,2,9,221,3,2,204,3,5,153,3,6,255,3,7,170,3,8,153,3,9,170,4,2,204,4,3,153,4,6,170,4,7,255,4,8,187],\"secondary\":false},{\"width\":9,\"bonus\":105,\"chr\":\"T\",\"pixels\":[1,2,238,2,2,221,3,2,238,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,2,221,6,2,221,7,2,255],\"secondary\":false},{\"width\":10,\"bonus\":120,\"chr\":\"U\",\"pixels\":[1,2,204,1,3,153,1,4,153,1,5,153,1,6,153,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,3,9,221,4,9,238,5,9,221,6,9,170,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,204,8,2,153],\"secondary\":false},{\"width\":10,\"bonus\":90,\"chr\":\"V\",\"pixels\":[1,2,255,1,3,153,2,2,238,2,3,255,2,4,255,2,5,187,3,5,238,3,6,255,3,7,221,4,7,221,4,8,255,4,9,187,5,6,187,5,7,204,6,4,221,6,5,187,7,2,255,7,3,170],\"secondary\":false},{\"width\":13,\"bonus\":165,\"chr\":\"W\",\"pixels\":[1,2,255,1,3,221,2,2,204,2,3,221,2,4,255,2,5,255,2,6,221,3,6,187,3,7,255,3,8,255,3,9,187,4,6,153,4,7,221,5,4,221,5,5,187,6,2,187,6,3,255,6,4,255,6,5,153,7,4,170,7,5,255,7,6,255,7,7,187,8,7,255,8,8,255,8,9,187,9,5,153,9,6,221,9,7,170,10,2,221,10,3,238,10,4,187,11,2,187],\"secondary\":false},{\"width\":9,\"bonus\":115,\"chr\":\"X\",\"pixels\":[1,2,221,1,9,238,2,2,255,2,3,255,2,7,153,2,8,221,2,9,153,3,3,153,3,4,255,3,5,221,3,6,204,4,5,255,4,6,255,4,7,170,5,3,187,5,4,170,5,7,255,5,8,255,5,9,153,6,2,255,6,8,204,6,9,255,7,9,170],\"secondary\":false},{\"width\":8,\"bonus\":95,\"chr\":\"Y\",\"pixels\":[0,2,187,1,2,255,1,3,221,2,3,221,2,4,255,2,5,153,3,5,238,3,6,255,3,7,255,3,8,255,3,9,255,4,5,204,4,6,170,4,7,153,4,8,153,4,9,204,5,3,187,5,4,187,6,2,238],\"secondary\":false},{\"width\":8,\"bonus\":105,\"chr\":\"Z\",\"pixels\":[0,9,204,1,2,238,1,7,153,1,8,255,1,9,255,2,2,221,2,6,221,2,7,255,2,9,221,3,2,221,3,4,153,3,5,255,3,6,221,3,9,221,4,2,238,4,3,221,4,4,255,4,9,221,5,2,255,5,3,204,5,9,255],\"secondary\":false},{\"width\":4,\"bonus\":65,\"chr\":\"[\",\"pixels\":[0,0,255,0,1,255,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,0,9,255,0,10,187,1,0,187,1,10,170],\"secondary\":false},{\"width\":8,\"bonus\":40,\"chr\":\"\\\\\\\\\",\"pixels\":[1,1,170,1,2,187,2,3,221,3,5,221,4,6,187,4,7,187,5,8,221,6,9,153],\"secondary\":false},{\"width\":5,\"bonus\":65,\"chr\":\"]\",\"pixels\":[1,0,153,1,10,153,2,0,255,2,1,255,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,187],\"secondary\":false},{\"width\":7,\"bonus\":40,\"chr\":\"^\",\"pixels\":[0,5,204,1,3,238,1,4,170,2,1,238,3,1,221,3,2,204,4,3,187,4,4,238],\"secondary\":false},{\"width\":7,\"bonus\":30,\"chr\":\"_\",\"pixels\":[0,10,221,1,10,221,2,10,221,3,10,221,4,10,221,5,10,221],\"secondary\":false},{\"width\":9,\"bonus\":110,\"chr\":\"a\",\"pixels\":[1,9,238,2,6,153,2,7,255,2,8,170,2,9,170,3,4,187,3,5,238,3,7,221,4,2,187,4,3,255,4,4,238,4,7,221,5,4,221,5,5,255,5,6,238,5,7,238,6,6,187,6,7,255,6,8,255,6,9,187,7,8,170,7,9,255],\"secondary\":false},{\"width\":7,\"bonus\":150,\"chr\":\"b\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,255,3,2,221,3,5,221,3,9,204,4,2,187,4,3,255,4,4,255,4,5,170,4,6,255,4,7,170,4,8,187,4,9,187,5,6,153,5,7,255,5,8,204],\"secondary\":false},{\"width\":8,\"bonus\":120,\"chr\":\"c\",\"pixels\":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,3,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,221,5,2,221,5,9,221,6,2,187,6,3,187,6,8,153,6,9,170],\"secondary\":false},{\"width\":10,\"bonus\":165,\"chr\":\"d\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,9,221,4,2,238,4,9,221,5,2,221,5,9,204,6,2,153,6,3,238,6,8,187,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,8,5,187,8,6,170],\"secondary\":false},{\"width\":7,\"bonus\":110,\"chr\":\"e\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,5,221,3,9,221,4,2,238,4,5,238,4,9,238],\"secondary\":false},{\"width\":7,\"bonus\":100,\"chr\":\"f\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,2,221,3,5,221,4,2,238,4,5,238],\"secondary\":false},{\"width\":10,\"bonus\":135,\"chr\":\"g\",\"pixels\":[0,4,170,0,5,238,0,6,255,0,7,187,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,238,5,2,238,5,9,221,6,2,204,6,6,255,6,7,255,6,8,255,6,9,204,7,6,204,7,7,153,7,8,153],\"secondary\":false},{\"width\":10,\"bonus\":175,\"chr\":\"h\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,5,221,4,5,221,5,5,221,6,2,204,6,3,153,6,4,153,6,5,238,6,6,153,6,7,153,6,8,153,6,9,221,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255],\"secondary\":false},{\"width\":5,\"bonus\":80,\"chr\":\"i\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,153,2,9,221],\"secondary\":false},{\"width\":5,\"bonus\":90,\"chr\":\"j\",\"pixels\":[2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,187,3,2,204,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,153],\"secondary\":false},{\"width\":9,\"bonus\":140,\"chr\":\"k\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,187,2,7,153,2,8,153,2,9,204,3,5,238,3,6,238,4,6,170,4,7,255,5,2,238,5,3,153,5,7,170,5,8,255,6,2,204,6,8,170,6,9,238,7,9,204],\"secondary\":false},{\"width\":7,\"bonus\":95,\"chr\":\"l\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,9,221,4,9,221,5,9,204],\"secondary\":false},{\"width\":12,\"bonus\":150,\"chr\":\"m\",\"pixels\":[1,6,170,1,7,221,1,8,255,1,9,255,2,2,170,2,3,255,2,4,255,2,5,221,3,4,204,3,5,255,3,6,238,4,6,204,4,7,255,4,8,221,5,7,187,5,8,255,6,6,221,7,4,238,7,5,204,8,2,187,8,3,255,8,4,255,8,5,255,8,6,255,8,7,238,8,8,204,8,9,187,9,7,170,9,8,204,9,9,255],\"secondary\":false},{\"width\":10,\"bonus\":130,\"chr\":\"n\",\"pixels\":[1,2,204,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,3,221,2,4,238,3,4,221,3,5,238,4,5,238,4,6,238,5,6,238,5,7,238,6,7,238,6,8,238,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,204],\"secondary\":false},{\"width\":10,\"bonus\":155,\"chr\":\"o\",\"pixels\":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,170,2,8,204,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,238,6,8,170,7,3,238,7,4,255,7,5,255,7,6,255,7,7,255,7,8,187,8,4,153,8,5,221,8,6,204],\"secondary\":false},{\"width\":7,\"bonus\":115,\"chr\":\"p\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,170,2,7,153,2,8,153,2,9,221,3,2,221,4,2,221,4,3,204,4,4,153,4,5,221,5,3,221,5,4,221],\"secondary\":false},{\"width\":10,\"bonus\":180,\"chr\":\"q\",\"pixels\":[0,4,153,0,5,238,0,6,238,0,7,170,1,3,221,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,8,221,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,221,6,8,153,6,9,238,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,7,9,187,7,10,153,8,4,153,8,5,204,8,6,204,8,10,255,9,10,204],\"secondary\":false},{\"width\":9,\"bonus\":145,\"chr\":\"r\",\"pixels\":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,238,2,7,153,2,8,153,2,9,221,3,2,238,3,6,238,4,2,204,4,3,204,4,4,153,4,5,204,4,6,204,4,7,255,5,3,221,5,4,221,5,8,255,6,9,238,7,9,153],\"secondary\":false},{\"width\":6,\"bonus\":115,\"chr\":\"s\",\"pixels\":[0,3,221,0,4,238,0,8,187,0,9,187,1,2,187,1,4,204,1,5,255,1,9,238,2,2,187,2,5,255,2,6,187,2,9,221,3,2,204,3,5,153,3,6,255,3,7,170,3,8,153,3,9,170,4,2,204,4,3,153,4,6,170,4,7,255,4,8,187],\"secondary\":false},{\"width\":9,\"bonus\":105,\"chr\":\"t\",\"pixels\":[1,2,238,2,2,221,3,2,238,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,2,221,6,2,221,7,2,255],\"secondary\":false},{\"width\":10,\"bonus\":120,\"chr\":\"u\",\"pixels\":[1,2,204,1,3,153,1,4,153,1,5,153,1,6,153,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,3,9,221,4,9,238,5,9,221,6,9,170,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,204,8,2,153],\"secondary\":false},{\"width\":10,\"bonus\":90,\"chr\":\"v\",\"pixels\":[1,2,255,1,3,153,2,2,238,2,3,255,2,4,255,2,5,187,3,5,238,3,6,255,3,7,221,4,7,221,4,8,255,4,9,187,5,6,187,5,7,204,6,4,221,6,5,187,7,2,255,7,3,170],\"secondary\":false},{\"width\":13,\"bonus\":165,\"chr\":\"w\",\"pixels\":[1,2,255,1,3,221,2,2,204,2,3,221,2,4,255,2,5,255,2,6,221,3,6,187,3,7,255,3,8,255,3,9,187,4,6,153,4,7,221,5,4,221,5,5,187,6,2,187,6,3,255,6,4,255,6,5,153,7,4,170,7,5,255,7,6,255,7,7,187,8,7,255,8,8,255,8,9,187,9,5,153,9,6,221,9,7,170,10,2,221,10,3,238,10,4,187,11,2,187],\"secondary\":false},{\"width\":9,\"bonus\":115,\"chr\":\"x\",\"pixels\":[1,2,221,1,9,238,2,2,255,2,3,255,2,7,153,2,8,221,2,9,153,3,3,153,3,4,255,3,5,221,3,6,204,4,5,255,4,6,255,4,7,170,5,3,187,5,4,170,5,7,255,5,8,255,5,9,153,6,2,255,6,8,204,6,9,255,7,9,170],\"secondary\":false},{\"width\":8,\"bonus\":95,\"chr\":\"y\",\"pixels\":[0,2,187,1,2,255,1,3,221,2,3,221,2,4,255,2,5,153,3,5,238,3,6,255,3,7,255,3,8,255,3,9,255,4,5,204,4,6,170,4,7,153,4,8,153,4,9,204,5,3,187,5,4,187,6,2,238],\"secondary\":false},{\"width\":8,\"bonus\":105,\"chr\":\"z\",\"pixels\":[0,9,204,1,2,238,1,7,153,1,8,255,1,9,255,2,2,221,2,6,221,2,7,255,2,9,221,3,2,221,3,4,153,3,5,255,3,6,221,3,9,221,4,2,238,4,3,221,4,4,255,4,9,221,5,2,255,5,3,204,5,9,255],\"secondary\":false},{\"width\":4,\"bonus\":45,\"chr\":\"{\",\"pixels\":[1,1,255,1,2,255,1,3,255,1,5,187,1,6,255,1,7,255,1,8,255,1,9,221,2,0,153],\"secondary\":false},{\"width\":2,\"bonus\":60,\"chr\":\"|\",\"pixels\":[0,0,255,0,1,255,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,0,9,255,0,10,255,0,11,255],\"secondary\":true},{\"width\":4,\"bonus\":45,\"chr\":\"}\",\"pixels\":[0,0,153,1,1,255,1,2,255,1,3,255,1,5,187,1,6,255,1,7,255,1,8,255,1,9,221],\"secondary\":false},{\"width\":7,\"bonus\":30,\"chr\":\"~\",\"pixels\":[0,5,221,1,4,255,2,4,187,3,5,187,4,5,255,5,4,204],\"secondary\":false}],\"width\":13,\"spacewidth\":3,\"shadow\":false,\"height\":12,\"basey\":9}');\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./src/dialog/index.ts\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"alt1/base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"alt1/base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ocr\"] = factory(require(\"alt1/base\"));\n\telse\n\t\troot[\"OCR\"] = factory(root[\"A1lib\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE_alt1_base__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/ocr/index.ts\":\n/*!**************************!*\\\n !*** ./src/ocr/index.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.generatefont = exports.readChar = exports.readSmallCapsBackwards = exports.readLine = exports.getChatColor = exports.GetChatColorMono = exports.findReadLine = exports.findChar = exports.decompose3col = exports.decomposeblack = exports.decompose2col = exports.canblend = exports.unblendTrans = exports.unblendKnownBg = exports.unblendBlackBackground = exports.debugFont = exports.debugout = exports.debug = void 0;\nconst base_1 = __webpack_require__(/*! alt1/base */ \"alt1/base\");\nexports.debug = {\n printcharscores: false,\n trackread: false\n};\nexports.debugout = {};\n/**\n * draws the font definition to a buffer and displays it in the dom for debugging purposes\n * @param font\n */\nfunction debugFont(font) {\n var spacing = font.width + 2;\n var buf = new base_1.ImageData(spacing * font.chars.length, font.height + 1);\n for (var a = 0; a < buf.data.length; a += 4) {\n buf.data[a] = buf.data[a + 1] = buf.data[a + 2] = 0;\n buf.data[a + 3] = 255;\n }\n for (var a = 0; a < font.chars.length; a++) {\n var bx = a * spacing;\n var chr = font.chars[a];\n for (var b = 0; b < chr.pixels.length; b += (font.shadow ? 4 : 3)) {\n buf.setPixel(bx + chr.pixels[b], chr.pixels[b + 1], [chr.pixels[b + 2], chr.pixels[b + 2], chr.pixels[b + 2], 255]);\n if (font.shadow) {\n buf.setPixel(bx + chr.pixels[b], chr.pixels[b + 1], [chr.pixels[b + 3], 0, 0, 255]);\n }\n }\n }\n buf.show();\n}\nexports.debugFont = debugFont;\nfunction unblendBlackBackground(img, r, g, b) {\n var rimg = new base_1.ImageData(img.width, img.height);\n for (var i = 0; i < img.data.length; i += 4) {\n var col = decomposeblack(img.data[i], img.data[i + 1], img.data[i + 2], r, g, b);\n rimg.data[i + 0] = col[0] * 255;\n rimg.data[i + 1] = rimg.data[i + 0];\n rimg.data[i + 2] = rimg.data[i + 0];\n rimg.data[i + 3] = 255;\n }\n return rimg;\n}\nexports.unblendBlackBackground = unblendBlackBackground;\n/**\n * unblends a imagebuffer into match strength with given color\n * the bgimg argument should contain a second image with pixel occluded by the font visible.\n * @param img\n * @param shadow detect black as second color\n * @param bgimg optional second image to\n */\nfunction unblendKnownBg(img, bgimg, shadow, r, g, b) {\n if (bgimg && (img.width != bgimg.width || img.height != bgimg.height)) {\n throw \"bgimg size doesn't match\";\n }\n var rimg = new base_1.ImageData(img.width, img.height);\n var totalerror = 0;\n for (var i = 0; i < img.data.length; i += 4) {\n var col = decompose2col(img.data[i], img.data[i + 1], img.data[i + 2], r, g, b, bgimg.data[i + 0], bgimg.data[i + 1], bgimg.data[i + 2]);\n if (shadow) {\n if (col[2] > 0.01) {\n console.log(\"high error component: \" + (col[2] * 100).toFixed(1) + \"%\");\n }\n totalerror += col[2];\n var m = 1 - col[1] - Math.abs(col[2]); //main color+black=100%-bg-error\n rimg.data[i + 0] = m * 255;\n rimg.data[i + 1] = col[0] / m * 255;\n rimg.data[i + 2] = rimg.data[i + 0];\n }\n else {\n rimg.data[i + 0] = col[0] * 255;\n rimg.data[i + 1] = rimg.data[i + 0];\n rimg.data[i + 2] = rimg.data[i + 0];\n }\n rimg.data[i + 3] = 255;\n }\n return rimg;\n}\nexports.unblendKnownBg = unblendKnownBg;\n/**\n * Unblends a font image that is already conpletely isolated to the raw image used ingame. This is the easiest mode for pixel fonts where alpha is 0 or 255, or for extracted font files.\n * @param img\n * @param r\n * @param g\n * @param b\n * @param shadow whether the font has a black shadow\n */\nfunction unblendTrans(img, shadow, r, g, b) {\n var rimg = new base_1.ImageData(img.width, img.height);\n var pxlum = r + g + b;\n for (var i = 0; i < img.data.length; i += 4) {\n if (shadow) {\n var lum = img.data[i + 0] + img.data[i + 1] + img.data[i + 2];\n rimg.data[i + 0] = img.data[i + 3];\n rimg.data[i + 1] = lum / pxlum * 255;\n rimg.data[i + 2] = rimg.data[i + 0];\n }\n else {\n rimg.data[i + 0] = img.data[i + 3];\n rimg.data[i + 1] = rimg.data[i + 0];\n rimg.data[i + 2] = rimg.data[i + 0];\n }\n rimg.data[i + 3] = 255;\n }\n return rimg;\n}\nexports.unblendTrans = unblendTrans;\n/**\n * Determised wether color [rgb]m can be a result of a blend with color [rgb]1 that is p (0-1) of the mix\n * It returns the number that the second color has to lie outside of the possible color ranges\n * @param rm resulting color\n * @param r1 first color of the mix (the other color is unknown)\n * @param p the portion of the [rgb]1 in the mix (0-1)\n */\nfunction canblend(rm, gm, bm, r1, g1, b1, p) {\n var m = Math.min(50, p / (1 - p));\n var r = rm + (rm - r1) * m;\n var g = gm + (gm - g1) * m;\n var b = bm + (bm - b1) * m;\n return Math.max(0, -r, -g, -b, r - 255, g - 255, b - 255);\n}\nexports.canblend = canblend;\n/**\n * decomposes a color in 2 given component colors and returns the amount of each color present\n * also return a third (noise) component which is the the amount leftover orthagonal from the 2 given colors\n */\nfunction decompose2col(rp, gp, bp, r1, g1, b1, r2, g2, b2) {\n //get the normal of the error (cross-product of both colors)\n var r3 = g1 * b2 - g2 * b1;\n var g3 = b1 * r2 - b2 * r1;\n var b3 = r1 * g2 - r2 * g1;\n //normalize to length 255\n var norm = 255 / Math.sqrt(r3 * r3 + g3 * g3 + b3 * b3);\n r3 *= norm;\n g3 *= norm;\n b3 *= norm;\n return decompose3col(rp, gp, bp, r1, g1, b1, r2, g2, b2, r3, g3, b3);\n}\nexports.decompose2col = decompose2col;\n/**\n * decomposes a pixel in a given color component and black and returns what proportion of the second color it contains\n * this is not as formal as decompose 2/3 and only give a \"good enough\" number\n */\nfunction decomposeblack(rp, gp, bp, r1, g1, b1) {\n var dr = Math.abs(rp - r1);\n var dg = Math.abs(gp - g1);\n var db = Math.abs(bp - b1);\n var maxdif = Math.max(dr, dg, db);\n return [1 - maxdif / 255];\n}\nexports.decomposeblack = decomposeblack;\n/**\n * decomposes a color in 3 given component colors and returns the amount of each color present\n */\nfunction decompose3col(rp, gp, bp, r1, g1, b1, r2, g2, b2, r3, g3, b3) {\n //P=x*C1+y*C2+z*C3\n //assemble as matrix \n //M*w=p\n //get inverse of M\n //dirty written out version of cramer's rule\n var A = g2 * b3 - b2 * g3;\n var B = g3 * b1 - b3 * g1;\n var C = g1 * b2 - b1 * g2;\n var D = b2 * r3 - r2 * b3;\n var E = b3 * r1 - r3 * b1;\n var F = b1 * r2 - r1 * b2;\n var G = r2 * g3 - g2 * r3;\n var H = r3 * g1 - g3 * r1;\n var I = r1 * g2 - g1 * r2;\n var det = r1 * A + g1 * D + b1 * G;\n //M^-1*p=w\n var x = (A * rp + D * gp + G * bp) / det;\n var y = (B * rp + E * gp + H * bp) / det;\n var z = (C * rp + F * gp + I * bp) / det;\n return [x, y, z];\n}\nexports.decompose3col = decompose3col;\n/**\n * brute force to the exact position of the text\n */\nfunction findChar(buffer, font, col, x, y, w, h) {\n if (x < 0) {\n return null;\n }\n if (y - font.basey < 0) {\n return null;\n }\n if (x + w + font.width > buffer.width) {\n return null;\n }\n if (y + h - font.basey + font.height > buffer.height) {\n return null;\n }\n var best = 1000; //TODO finetune score constants\n var bestchar = null;\n for (var cx = x; cx < x + w; cx++) {\n for (var cy = y; cy < y + h; cy++) {\n var chr = readChar(buffer, font, col, cx, cy, false, false);\n if (chr != null && chr.sizescore < best) {\n best = chr.sizescore;\n bestchar = chr;\n }\n }\n }\n return bestchar;\n}\nexports.findChar = findChar;\n/**\n * reads text with unknown exact coord or color. The given coord should be inside the text\n * color selection not implemented yet\n */\nfunction findReadLine(buffer, font, cols, x, y, w = -1, h = -1) {\n if (w == -1) {\n w = font.width + font.spacewidth;\n x -= Math.ceil(w / 2);\n }\n if (h == -1) {\n h = 7;\n y -= 1;\n }\n var chr = null;\n if (cols.length > 1) {\n //TODO use getChatColor() instead for non-mono?\n var sorted = GetChatColorMono(buffer, new base_1.Rect(x, y - font.basey, w, h), cols);\n //loop until we have a match (max 2 cols)\n for (var a = 0; a < 2 && a < sorted.length && chr == null; a++) {\n chr = findChar(buffer, font, sorted[a].col, x, y, w, h);\n }\n }\n else {\n chr = findChar(buffer, font, cols[0], x, y, w, h);\n }\n if (chr == null) {\n return { debugArea: { x, y, w, h }, text: \"\", fragments: [] };\n }\n return readLine(buffer, font, cols, chr.x, chr.y, true, true);\n}\nexports.findReadLine = findReadLine;\nfunction GetChatColorMono(buf, rect, colors) {\n var colormap = colors.map(c => ({ col: c, score: 0 }));\n if (rect.x < 0 || rect.y < 0 || rect.x + rect.width > buf.width || rect.y + rect.height > buf.height) {\n return colormap;\n }\n var data = buf.data;\n var maxd = 50;\n for (var colobj of colormap) {\n var score = 0;\n var col = colobj.col;\n for (var y = rect.y; y < rect.y + rect.height; y++) {\n for (var x = rect.x; x < rect.x + rect.width; x++) {\n var i = x * 4 + y * 4 * buf.width;\n var d = Math.abs(data[i] - col[0]) + Math.abs(data[i + 1] - col[1]) + Math.abs(data[i + 2] - col[2]);\n if (d < maxd) {\n score += maxd - d;\n }\n }\n }\n colobj.score = score;\n }\n return colormap.sort((a, b) => b.score - a.score);\n}\nexports.GetChatColorMono = GetChatColorMono;\nfunction unblend(r, g, b, R, G, B) {\n var m = Math.sqrt(r * r + g * g + b * b);\n var n = Math.sqrt(R * R + G * G + B * B);\n var x = (r * R + g * G + b * B) / n;\n var y = Math.sqrt(Math.max(0, m * m - x * x));\n var r1 = Math.max(0, (63.75 - y) * 4);\n var r2 = x / n * 255;\n if (r2 > 255) //brighter than refcol\n {\n r1 = Math.max(0, r1 - r2 + 255);\n r2 = 255;\n }\n return [r1, r2];\n}\nfunction getChatColor(buf, rect, colors) {\n var bestscore = -1.0;\n var best = null;\n var b2 = 0.0;\n var data = buf.data;\n for (let col of colors) {\n var score = 0.0;\n for (var y = rect.y; y < rect.y + rect.height; y++) {\n for (var x = rect.x; x < rect.x + rect.width; x++) {\n if (x < 0 || x + 1 >= buf.width) {\n continue;\n }\n if (y < 0 || y + 1 >= buf.width) {\n continue;\n }\n let i1 = buf.pixelOffset(x, y);\n let i2 = buf.pixelOffset(x + 1, y + 1);\n var pixel1 = unblend(data[i1 + 0], data[i1 + 1], data[i1 + 2], col[0], col[1], col[2]);\n var pixel2 = unblend(data[i2 + 0], data[i2 + 1], data[i2 + 2], col[0], col[1], col[2]);\n //TODO this is from c# can simplify a bit\n var s = (pixel1[0] / 255 * pixel1[1] / 255) * (pixel2[0] / 255 * (255.0 - pixel2[1]) / 255);\n score += s;\n }\n }\n if (score > bestscore) {\n b2 = bestscore;\n bestscore = score;\n best = col;\n }\n else if (score > b2) {\n b2 = score;\n }\n }\n //Console.WriteLine(\"color: \" + bestcol + \" - \" + (bestscore - b2));\n //bestscore /= rect.width * rect.height;\n return best;\n}\nexports.getChatColor = getChatColor;\n/**\n * reads a line of text with exactly known position and color. y should be the y coord of the text base line, x should be the first pixel of a new character\n */\nfunction readLine(buffer, font, colors, x, y, forward, backward = false) {\n if (typeof colors[0] != \"number\" && colors.length == 1) {\n colors = colors[0];\n }\n var multicol = typeof colors[0] != \"number\";\n var allcolors = multicol ? colors : [colors];\n var detectcolor = function (sx, sy, backward) {\n var w = Math.floor(font.width * 1.5);\n if (backward) {\n sx -= w;\n }\n sy -= font.basey;\n return getChatColor(buffer, { x: sx, y: sy, width: w, height: font.height }, allcolors);\n };\n var fragments = [];\n var x1 = x;\n var x2 = x;\n var maxspaces = (typeof font.maxspaces == \"number\" ? font.maxspaces : 1);\n let fragtext = \"\";\n let fraghadprimary = false;\n var lastcol = null;\n let addfrag = (forward) => {\n if (!fragtext) {\n return;\n }\n let frag = {\n text: fragtext,\n color: lastcol,\n index: 0,\n xstart: x + (forward ? fragstartdx : fragenddx),\n xend: x + (forward ? fragenddx : fragstartdx)\n };\n if (forward) {\n fragments.push(frag);\n }\n else {\n fragments.unshift(frag);\n }\n fragtext = \"\";\n fragstartdx = dx;\n fraghadprimary = false;\n };\n for (var dirforward of [true, false]) {\n //init vars\n if (dirforward && !forward) {\n continue;\n }\n if (!dirforward && !backward) {\n continue;\n }\n var dx = 0;\n var fragstartdx = dx;\n var fragenddx = dx;\n var triedspaces = 0;\n var triedrecol = false;\n var col = multicol ? null : colors;\n while (true) {\n col = col || detectcolor(x + dx, y, !dirforward);\n var chr = (col ? readChar(buffer, font, col, x + dx, y, !dirforward, true) : null);\n if (col == null || chr == null) {\n if (triedspaces < maxspaces) {\n dx += (dirforward ? 1 : -1) * font.spacewidth;\n triedspaces++;\n continue;\n }\n if (multicol && !triedrecol && fraghadprimary) {\n dx -= (dirforward ? 1 : -1) * triedspaces * font.spacewidth;\n triedspaces = 0;\n col = null;\n triedrecol = true;\n continue;\n }\n if (dirforward) {\n x2 = x + dx - font.spacewidth;\n }\n else {\n x1 = x + dx + font.spacewidth;\n }\n break;\n }\n else {\n if (lastcol && (col[0] != lastcol[0] || col[1] != lastcol[1] || col[2] != lastcol[2])) {\n addfrag(dirforward);\n }\n var spaces = \"\";\n for (var a = 0; a < triedspaces; a++) {\n spaces += \" \";\n }\n if (dirforward) {\n fragtext += spaces + chr.chr;\n }\n else {\n fragtext = chr.chr + spaces + fragtext;\n }\n if (!chr.basechar.secondary) {\n fraghadprimary = true;\n }\n triedspaces = 0;\n triedrecol = false;\n dx += (dirforward ? 1 : -1) * chr.basechar.width;\n fragenddx = dx;\n lastcol = col;\n }\n }\n if (lastcol && fraghadprimary) {\n addfrag(dirforward);\n }\n }\n fragments.forEach((f, i) => f.index = i);\n return {\n debugArea: { x: x1, y: y - 9, w: x2 - x1, h: 10 },\n text: fragments.map(f => f.text).join(\"\"),\n fragments\n };\n}\nexports.readLine = readLine;\n/**\n * Reads a line of text that uses a smallcaps font, these fonts can have duplicate chars that only have a different amount of\n * empty space after the char before the next char starts.\n * The coordinates should be near the end of the string, or a rectangle with high 1 containing all points where the string can end.\n */\nfunction readSmallCapsBackwards(buffer, font, cols, x, y, w = -1, h = -1) {\n if (w == -1) {\n w = font.width + font.spacewidth;\n x -= Math.ceil(w / 2);\n }\n if (h == -1) {\n h = 7;\n y -= 1;\n }\n var matchedchar = null;\n var sorted = (cols.length == 1 ? [{ col: cols[0], score: 1 }] : GetChatColorMono(buffer, new base_1.Rect(x, y - font.basey, w, h), cols));\n //loop until we have a match (max 2 cols)\n for (var a = 0; a < 2 && a < sorted.length && matchedchar == null; a++) {\n for (var cx = x + w - 1; cx >= x; cx--) {\n var best = 1000; //TODO finetune score constants\n var bestchar = null;\n for (var cy = y; cy < y + h; cy++) {\n var chr = readChar(buffer, font, sorted[a].col, cx, cy, true, false);\n if (chr != null && chr.sizescore < best) {\n best = chr.sizescore;\n bestchar = chr;\n }\n }\n if (bestchar) {\n matchedchar = bestchar;\n break;\n }\n }\n }\n if (matchedchar == null) {\n return { text: \"\", debugArea: { x, y, w, h } };\n }\n return readLine(buffer, font, cols, matchedchar.x, matchedchar.y, false, true);\n}\nexports.readSmallCapsBackwards = readSmallCapsBackwards;\n/**\n * Reads a single character at the exact given location\n * @param x exact x location of the start of the character domain (includes part of the spacing between characters)\n * @param y exact y location of the baseline pixel of the character\n * @param backwards read in backwards direction, the x location should be the first pixel after the character domain in that case\n */\nfunction readChar(buffer, font, col, x, y, backwards, allowSecondary) {\n y -= font.basey;\n var shiftx = 0;\n var shifty = font.basey;\n var shadow = font.shadow;\n var debugobj = null;\n var debugimg = null;\n if (exports.debug.trackread) {\n var name = x + \";\" + y + \" \" + JSON.stringify(col);\n if (!exports.debugout[name]) {\n exports.debugout[name] = [];\n }\n debugobj = exports.debugout[name];\n }\n //===== make sure the full domain is inside the bitmap/buffer ======\n if (y < 0 || y + font.height >= buffer.height) {\n return null;\n }\n if (!backwards) {\n if (x < 0 || x + font.width > buffer.width) {\n return null;\n }\n }\n else {\n if (x - font.width < 0 || x > buffer.width) {\n return null;\n }\n }\n //====== start reading the char ======\n var scores = [];\n for (var chr = 0; chr < font.chars.length; chr++) {\n var chrobj = font.chars[chr];\n if (chrobj.secondary && !allowSecondary) {\n continue;\n }\n scores[chr] = { score: 0, sizescore: 0, chr: chrobj };\n var chrx = (backwards ? x - chrobj.width : x);\n if (exports.debug.trackread) {\n debugimg = new base_1.ImageData(font.width, font.height);\n }\n for (var a = 0; a < chrobj.pixels.length;) {\n var i = (chrx + chrobj.pixels[a]) * 4 + (y + chrobj.pixels[a + 1]) * buffer.width * 4;\n var penalty = 0;\n if (!shadow) {\n penalty = canblend(buffer.data[i], buffer.data[i + 1], buffer.data[i + 2], col[0], col[1], col[2], chrobj.pixels[a + 2] / 255);\n a += 3;\n }\n else {\n var lum = chrobj.pixels[a + 3] / 255;\n penalty = canblend(buffer.data[i], buffer.data[i + 1], buffer.data[i + 2], col[0] * lum, col[1] * lum, col[2] * lum, chrobj.pixels[a + 2] / 255);\n a += 4;\n }\n scores[chr].score += Math.max(0, penalty);\n //TODO add compiler flag to this to remove it for performance\n if (debugimg) {\n debugimg.setPixel(chrobj.pixels[a], chrobj.pixels[a + 1], [penalty, penalty, penalty, 255]);\n }\n }\n scores[chr].sizescore = scores[chr].score - chrobj.bonus;\n if (debugobj) {\n debugobj.push({ chr: chrobj.chr, score: scores[chr].sizescore, rawscore: scores[chr].score, img: debugimg });\n }\n }\n scores.sort((a, b) => a.sizescore - b.sizescore);\n if (exports.debug.printcharscores) {\n scores.slice(0, 5).forEach(q => console.log(q.chr.chr, q.score.toFixed(3), q.sizescore.toFixed(3)));\n }\n var winchr = scores[0];\n if (!winchr || winchr.score > 400) {\n return null;\n }\n return { chr: winchr.chr.chr, basechar: winchr.chr, x: x + shiftx, y: y + shifty, score: winchr.score, sizescore: winchr.sizescore };\n}\nexports.readChar = readChar;\n/**\n * Generates a font json description to use in reader functions\n * @param unblended A source image with all characters lined up. The image should be unblended into components using the unblend functions\n * The lowest pixel line of this image is used to mark the location and size of the charecters if the red component is 255 it means there is a character on that pixel column\n * @param chars A string containing all the characters of the image in the same order\n * @param seconds A string with characters that are considered unlikely and should only be detected if no other character is possible.\n * For example the period (.) character matches positive inside many other characters and should be marked as secondary\n * @param bonusses An object that contains bonus scores for certain difficult characters to make the more likely to be red.\n * @param basey The y position of the baseline pixel of the font\n * @param spacewidth the number of pixels a space takes\n * @param treshold minimal color match proportion (0-1) before a pixel is used for the font\n * @param shadow whether this font also uses the black shadow some fonts have. The \"unblended\" image should be unblended correspondingly\n * @returns a javascript object describing the font which is used as input for the different read functions\n */\nfunction generatefont(unblended, chars, seconds, bonusses, basey, spacewidth, treshold, shadow) {\n //settings vars\n treshold *= 255;\n //initial vars\n var miny = unblended.height - 1;\n var maxy = 0;\n var font = { chars: [], width: 0, spacewidth: spacewidth, shadow: shadow, height: 0, basey: 0 };\n var ds = false;\n var chardata = [];\n //index all chars\n for (var dx = 0; dx < unblended.width; dx++) {\n var i = 4 * dx + 4 * unblended.width * (unblended.height - 1);\n if (unblended.data[i] == 255 && unblended.data[i + 3] == 255) {\n if (ds === false) {\n ds = dx;\n }\n }\n else {\n if (ds !== false) {\n //char found, start detection\n var de = dx;\n var char = chars[chardata.length];\n var chr = {\n ds: ds,\n de: de,\n width: de - ds,\n chr: char,\n bonus: (bonusses && bonusses[char]) || 0,\n secondary: seconds.indexOf(chars[chardata.length]) != -1,\n pixels: []\n };\n chardata.push(chr);\n font.width = Math.max(font.width, chr.width);\n for (x = 0; x < de - ds; x++) {\n for (y = 0; y < unblended.height - 1; y++) {\n var i = (x + ds) * 4 + y * unblended.width * 4;\n if (unblended.data[i] >= treshold) {\n miny = Math.min(miny, y);\n maxy = Math.max(maxy, y);\n }\n }\n }\n ds = false;\n }\n }\n }\n font.height = maxy + 1 - miny;\n font.basey = basey - miny;\n //detect all pixels\n for (var a in chardata) {\n var chr = chardata[a];\n for (var x = 0; x < chr.width; x++) {\n for (var y = 0; y < maxy + 1 - miny; y++) {\n var i = (x + chr.ds) * 4 + (y + miny) * unblended.width * 4;\n if (unblended.data[i] >= treshold) {\n chr.pixels.push(x, y);\n chr.pixels.push(unblended.data[i]);\n if (shadow) {\n chr.pixels.push(unblended.data[i + 1]);\n }\n chr.bonus += 5;\n }\n }\n }\n //prevent js from doing the thing with unnecessary output precision\n chr.bonus = +chr.bonus.toFixed(3);\n font.chars.push({ width: chr.width, bonus: chr.bonus, chr: chr.chr, pixels: chr.pixels, secondary: chr.secondary });\n }\n return font;\n}\nexports.generatefont = generatefont;\n\n\n/***/ }),\n\n/***/ \"alt1/base\":\n/*!**************************************************************************************************!*\\\n !*** external {\"root\":\"A1lib\",\"commonjs2\":\"alt1/base\",\"commonjs\":\"alt1/base\",\"amd\":\"alt1/base\"} ***!\n \\**************************************************************************************************/\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_alt1_base__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./src/ocr/index.ts\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as dochandler from \"./modules/dochandler\";\nimport * as settings from \"./modules/settings\";\nimport * as slayer from \"./modules/slayer\";\nimport * as logger from \"./modules/logger\";\nimport \"./index.html\";\nimport \"./appconfig.json\";\n/* COPYRIGHT NOTICE - DO NOT REMOVE\n 2021 @ Unlishema Dragonsworn\n I have programmed this enitre app myself; however, I must give credit where credit is due.\n \n The credits have been moved into their own file @ https://slayer.unlishema.org/pages/credits.html\n*/\n/*\n ~~~ Slayer Assistant App ~~~\n Features coming in the near future (Also my current TODO List)\n\n ~ Before Release for Sure ~\n Update the about page. (Will need updated again on next release)\n Update the changelog page. (Will need updated again on next release)\n Update the credits page. (Will need updated again on next release)\n\n ~ Coming Next Release ~\n Adjust where the CNAME for the app on github is located for source update (Done)\n Upload the source of the app to github so we won't lose it again (Ready but source needs Tested First)\n Adjust the DNS Record for https://slayer.unlishema.org to point at https://unlishema.github.io/slayerassistant/dist instead for new update because the source is the main dir\n Add ability to load the database through a php file instead of the json (Done, except for reapers.json)\n - We will still use a json database in the app but the php file will build the json via MySQL (Done)\n - The php file will be creatures.json via the .htaccess file (Done)\n - http://slayer.unlishema.org/data/creatures.json will load http://slayer.unlishema.org/data/creatures.php?q=all (Done)\n - Add other features to the database query php even if the app don't use them yet (Coming in the future)\n -- Example: http://slayer.unlishema.org/data/creatures.php?q=Dragon&l=10\n -- l=100 could limit results, d could have it give extra details, q could also be setup for seaching, and so on\n Adjust the caching of the json database files to make sure they get updated timely (use .htaccess and mode_expires.c)\n - This may not be needed once I change over to the php file instead. (Doesn't seem to be needed anymore, more testing required)\n\n ~ Coming Very Soon Maybe even next Release ~\n Add in a status tracking area to keep track of xp/hr, kills/hr, and more (Needs finished)\n Add settings into the app finally (Needs rest added)\n Adjust histories to use sessionStorage\n Make it show if it detects your using alt1toolkit or not and warn a users of the features they are missing without using alt1toolkit.\n - Also add into settings ability to hide this warning. Also add setting to turn off injection of the alt1 app.\n\n ~ Near future Release ~\n Add support for Ushubti\n\n ~ Settings for the app ~\n Settings:\n - Ability to toggle on and off Debug and Verbose mode\n - Ability to toggle auto find task via dialog (Done)\n - Ability to toggle auto find current task via Slayer Count RS3UI (Done)\n - Ability to toggle extra info to make box smaller without scrollbar (Done)\n - Ability to toggle all hidden creatures\n -- Ability to toggle sub-classes of hidden creatures like (elite), (dragonkin lab) and such\n - Ability to select default loading\n -- Default Task(s) on open and adjust doc based on it (Done, Partially)\n -- Load previous task(s) and adjust doc based on it\n - Ability to select defaults for everything (Later On)\n -- Select default creature per task\n -- Select default variant per creature\n - Ability to customize the Look N Feel of the Slayer Assistant UI (Way Later On)\n - Ability to select how long to save search history (Way Later On)\n - Ability to select the type of search algo for the app (Maybe Later On)\n - Ability to toggle warnings (eg. Missing Features due to not on Alt1Toolkit, Missing Data, and so on...)\n - Ability to turn off app injection (This will fix issues where a user can't inject into the client)\n\n*/\nif (window.alt1)\n alt1.identifyAppUrl(\"./appconfig.json\");\n// Initialize the JavaScript for the app\ndocument.addEventListener(\"DOMContentLoaded\", function () { return __awaiter(void 0, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n // Setup the main document and load assignment index\n return [4 /*yield*/, dochandler.main.setup.documentMain()];\n case 1:\n // Setup the main document and load assignment index\n _a.sent();\n // Run the Config Setup Process\n return [4 /*yield*/, settings.controller.load()];\n case 2:\n // Run the Config Setup Process\n _a.sent();\n // Start the capture loop at the configured interval\n setInterval(function () {\n slayer.findTask();\n }, settings.controller.data.autoCapture.loopTimer);\n return [3 /*break*/, 4];\n case 3:\n error_1 = _a.sent();\n console.error(\"Initialization error:\", error_1);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n}); });\n// Save settings before closing the app\ndocument.addEventListener(\"beforeunload\", function () { return __awaiter(void 0, void 0, void 0, function () {\n var error_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, settings.controller.save()];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n error_2 = _a.sent();\n logger.error(\"Error saving settings:\", error_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n}); });\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/pages/about.html b/dist/pages/about.html new file mode 100644 index 0000000..5969848 --- /dev/null +++ b/dist/pages/about.html @@ -0,0 +1,96 @@ + + + + About Slayer Assistant + + + + + + +
Open Credits
+
Open Changelog
+

Need Help or Having Trouble?
Welcome to the Correct Place!

+ +

Current Slayer Assistant Look N Feel

+

This Look N Feel has been designed by the community. It has slowly but surely updated to + accomadate new information and features.

+ Slayer Assistant Interface Image + +

What activates the Slayer Assistant?

+

There are a few different instances that will cause the Slayer Assistant to update it's + information. The first is if you go get a new task from a slayer master or death for reaper tasks. The next is + while you are on a task, it will keep track of your kills vis the slayer/reaper counter GUI.

+

Once it reads an interface similar to the examples below it will save this assignment information + and automatically do a lookup for you. You can also click on Capture to make it try and lookup a task on the + screen at the very moment.

+

The following are examples of the interfaces it can read for slayer tasks.

+
+ Slayer Assignment Interface Image +

Example Slayer Assignment Interface

+
+
+ VIP Ticket Interface Image +

Example Slayer Ticket Assignment Interface

+
+
+ Slayer Counter Expanded Image + +

Example Slayer Counter Interface

+

This interface will cause it to lookup the exact assignment that is given (if expanded) + and display relevant data; otherwise, it will just attempt to update the count of the current task it has + loaded.

+
+

The following are examples of the interfaces it can read for reaper tasks.

+
+ Reaper Assignment Interface Image +

Example Reaper Assignment Interface

+

This interface will cause it to lookup the exact assignment that is given and display + relevant data.

+
+
+ Reaper Counter Expanded Image + +

Example Reaper Counter Interface

+

This interface will cause it to lookup the exact assignment that is given (if expanded) + and display relevant data; otherwise, it will just attempt to update the count of the current task it has + loaded.

+
+

The following are examples of the interfaces it can read for select your own assignment tasks. +

+
+ Select Your Own Assignment Interface Image +

Example Select Your Own Assignment Interface

+

This interface will cause it to display a list of suggested tasks and why they are + suggested for the Select Your Own Assignment.

+
+ + +

Did you know?

+

There is now a search history you can use with the up and down arrow key? It resets + everytime you close the app.

+

If you hover over the assignment wiki, creature wiki, and See More... on the app it shows + more data. Give it a try

+ Right Click Image +

Opens up Slayer Assistant

+ + + + + + + + \ No newline at end of file diff --git a/dist/pages/changelog.html b/dist/pages/changelog.html new file mode 100644 index 0000000..c5141fd --- /dev/null +++ b/dist/pages/changelog.html @@ -0,0 +1,438 @@ + + + + Changelog + + + + + +
Go Back
+ +

06/22/2024 - Bug Fixes and Future Updates

+

+ Bug Fixes: Quite a bit of minor (and a couple major) bugs that poped up during the newest development of + the app has been fixed in this release. There was quick pushes for the major bugs to get rid of them as fast as + possible. +

+

+ Basic Settings Added: Basic settings have been added, more will come in the future. The current settings + will allow at least simple control over the app so far. A few to more coming soon is search and lookup history. +

+

+ Updates to Allow Better Future Updates: Quite a bit of the backend of the app has been re-wrote to allow + better future updates. A couple examples are adding settings to allow better usability of the app, making other + looks for the app to allow a more personal feel for the app, and adding comments to the code along with + restructuring it to be easier to navigate and understand. All of these changes were to allow the next future + updates to be easier to implement and the settings are working but not all of them have been added where you can + change them. This should come in the next update. +

+

+ A few Tweaks: There is also a few tweaks to different parts of the app that happened as well due to these + changes. The About Page width has changed to make it easier to read. The LookNFeel of the app has been slightly + altered during the update due to making it more flexible for the future style update. The LookNFeel also has a + limited UI option now that is changable in the settings. +

+ +

06/15/2024 - Added Counter UI Support

+

+ Slayer and Reaper Counter UI: Full support added. When collapsed, it updates only the current assignment + count; when expanded, it loads and updates the assignment unless it's already loaded. +

+

+ Task Comparison: Compare Slayer tasks by separating them with a "|". Note: Reaper assignments cannot be + compared. +

+

+ Suggested Slayer Assignments: For level 120, "Select Your Own Assignment" dialog now includes suggested + tasks. Search "suggest" in the search bar to view suggestions. +

+

+ Navigation Enhancements: Navigate forward and backward through lookups, making it easy to revisit + previous tasks and suggested assignments. +

+

+ UI Adjustments: Improved look and feel for all pages when resized. Additional tweaks are planned for + perfection. +

+

+ Project Adjustments: Updates now designed to avoid disruptions, ensuring smoother future Alt1 updates. +

+

+ Code Refactoring: Improved readability and data separation into Readers for better portability. Skillbert + can now extract Readers for the main Alt1 source. +

+

+ New DevTools: Added debugging functions for testing and resolving issues. +

+ + +

06/11/2024 - Major Recode +

+

Today is a special day because a massive recode has came for Slayer Assistant. This recode + started on 06/02/2024. Most of the changes were due to an update to the base alt1. You may not see a lot of + changes but there is a lot, so lets go over them all.

+

The recode has allowed me to have all the code neater so updates should be much easier. Also + new features won't be as hard to add in because the code before was a huge mess

+

Features coming soon

+
    +
  • Update the forum post
  • +
  • Add in some basic settings
  • +
  • 120 Slayer Assignment suggestions (Needs Page Made)
  • +
  • Ability to lookup task via Slayer Counter RS3
  • +
  • Ability to lookup task via Reaper Counter RS3
  • +
  • Add support for Ushabti
  • +
+

Features added

+
    +
  • Adjusted Search Algorithm to work better
  • +
  • Reaper Task support has been added (Needs more Work)
  • +
  • Added Necromancy Support to databaase and app
  • +
  • Ability to Ctrl+V paste an image for lookup
  • +
  • Ability to Drag & Drop an image for lookup
  • +
  • Added a small copyright at the bottom of all pages
  • +
  • Search bar now has history using up and down arrows
  • +
      +
    • It also temp saves the current search too
    • +
    +
  • Optimized the updating of current task
  • +
      +
    • This way it won't flicker on updates
    • +
    +
+

Features updated

+
    +
  • Massive fixes to the database
  • +
  • Updated the database for new content
  • +
  • Updated the about page with new info
  • +
  • Capture Loop has been optimized
  • +
  • Capture Button has now been added
  • +
  • Search Button is also the Capture Button
  • +
      +
    • It changes when you type in search
    • +
    +
+

Features kept from previous version

+
    +
  • Help/About, Settings, & Donate Buttons
  • +
  • Search Bar and Capture/Search Button
  • +
  • Ability to show single Assignments
  • +
  • Ability to show 2(vs) Assignments
  • +
  • Important Info Shown at All Times
  • +
      +
    • Wiki, Kills, & Assignment
    • +
        +
      • Total Exp for Assignment
      • +
      • Hover Assignment Wiki
      • +
          +
        • Slayer Master Info
        • +
        +
      +
    • Locations for Assignment
    • +
    • Equipment Suggested for Assignment
    • +
    • Wiki, Creatures, & Creature Variants
    • +
        +
      • Slayer Level & Exp
      • +
      • Weakness & Susceptible
      • +
      • Hover Creature Wiki
      • +
          +
        • Image
        • +
        • Stats
        • +
            +
          • Combat Level
          • +
          • Lifepoints
          • +
          • Defence
          • +
          +
        • Exp
        • +
            +
          • Combat
          • +
          • Lifepoints
          • +
          +
        • Max Hit
        • +
            +
          • Melee
          • +
          • Range
          • +
          • Magic
          • +
          • Spec
          • +
          +
        +
      +
    +
+ +

04/27/2024 - Minor Bug Fixes

+

Fixed a bug that caused only the first assignment to get loaded and not the second one.

+

Fixed a bug that caused the wiki links to not go to the currently loaded assignment.

+ +

02/13/2022 - Minor but Needed

+

Finally have a little time to work on updating the Forum Post as well as the credits. Also going + to update the about section soon.

+ +

12/24/2021 - Merry Christmas

+

Finished updating all the old changelog information, some may be missing but the most of it is + there for now. Need to backup discord info during development so I can check later.

+

Adding about info section soon...

+

Current App Features to Date

+
    +
  • Help/About, Settings, & Donate Buttons
  • +
  • Search Bar and Button
  • +
  • Ability to show 1 or 2(vs) Assignments
  • +
  • Important Info Shown at All Times
  • +
      +
    • Wiki, Kills, & Assignment
    • +
        +
      • Total Exp for Assignment
      • +
      • Hover Assignment Wiki
      • +
          +
        • Slayer Master Info
        • +
        +
      +
    • Locations for Assignment
    • +
    • Equipment Suggested for Assignment
    • +
    • Wiki, Creatures, & Creature Varants
    • +
        +
      • Slayer Level & Exp
      • +
      • Weakness & Susceptible
      • +
      • Hover Creature Wiki
      • +
          +
        • Image
        • +
        • Stats
        • +
            +
          • Combat Level
          • +
          • Lifepoints
          • +
          • Defence
          • +
          +
        • Exp
        • +
            +
          • Combat
          • +
          • Lifepoints
          • +
          +
        • Max Hit
        • +
            +
          • Melee
          • +
          • Range
          • +
          • Magic
          • +
          • Spec
          • +
          +
        +
      +
    +
+ +

12/09/2021 - Beta Updated

+

Massively adjusted the look and feel of the app. Moved a lot of data into a "Wiki Preview Screen" + that shows up when hovering over the wiki button.

+

Adjusted and added a lot of the user experience features.

+
    +
  • Hover Assigment Wiki for Slayer Master Info
  • +
  • Hover Creature Wiki for Creature Info
  • +
  • Adjusted/Added hovering effects timer
  • +
  • Added donate button just to have it for now
  • +
+ +

11/29/2021 - Beta Updated

+

Added 2 items that was missed before even though they aren't complete yet.

+
    +
  • Added About Info Button
  • +
  • Added Settings Button
  • +
+ +

11/19/2021 - Beta Released

+

Released the Beta to the public as it was working well enough for the public to use without worry + about it crashing.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ +

11/09/2021 - Beta Getting Close

+

Fixed almost all the major bugs and most of the minor bugs, next is to finish adjusting the look + of the new app.

+

With a massive amount of help from Emma + Kitty, I was finally able to add the first bit of + user experience features to the app making the list of creatures smaller and easiler to navigate. Also default + selected creatures were added. These features still need refined more so they do everything they are supposed + to.

+ +

08/12/2021 - Changelog Added

+

Added the changelog and about webpages for the app; however, still haven't added them to the app + intself. Still need to work on settings and updating the look and feel even more to work out the rest of the + bugs.

+ +

08/05/2021 - New Alpha Release

+

Released the alpha to the development channel on Discord with a few bugs and a lot of information + missing to see how it worked for others before releasing to the public.

+

Features partially or fully added.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ +

07/09/2021 - Major Bug Found

+

Soon after doing the redesign of the Database Updater, a major bug came up that almost crashed + the computer many times. Come to find out this was a bug in the compiler I was using and had nothing to do with + the way I created the app at all.

+ +

06/11/2021 - Redesign Revealed

+

Revealed the redesigned look and feel of the Slayer Assistant to the Development channel on + RuneApps Discord. Public didn't have access to the app but got to see it's progress.

+

Features partially or fully added.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ +

05/20/2021 - Redesign Started

+

Due to a major computer crash that required a re-install of the OS, all source for the database + updater was lost. This lead to a complete redesign of the app for many reasons, but the biggest was due to the + system not supporting cluster tasks.

+

After a lot of discussion with Zykrow on the + matter, I started working on the new database + updater and redesigning the Alt1 app.

+

Features planned for the redesign.

+
    +
  • Ability to search for an assignment
  • +
  • Settings for app
  • +
  • About info for app
  • +
  • Refresh/reload button to allow manual reading of task incase the loop breaks
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
  • Donate to contributers button
  • +
+ +

05/14/2021 - First Release

+

With a lot of assistance from Skillbert on + discord, I was finally able to create my first + basic app on Alt1.

+

Not long after the first app was working, I was able to turn it into the Slayer Assistant app. + This was not without help from the rest of the discord comunity though. crazye97 assisted a lot to get the first version created. troy236 gave me the answer to my last issue with + the app allowing me to get it released.

+

Here is a list of all features supported in this version.

+
    +
  • A button to read the task on screen incase the app had a glitch and wasn't working correctly
  • +
  • Compare 2 Assignments side by side
  • +
  • Basic Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Creature information
    • +
        +
      • Name, Image, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness (as Displayed on wiki)
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    • Wiki links for each creature
    • +
    +
+ +

05/12/2021 - Project Started

+

Here is a little history on how this app came to be.

+

After a long conversation with Zykrow on the + viability of a new slayer app for Alt1, I + started doing some research on creating Alt1 apps and come to find out it is not hard but not easy either; + however, redesigning the wheel is bad practice so lets see if anyone else has already created an app like this. +

+

To my suprise there was one; however, it was outdated and no source code was known to exist for + it. Oh well. Time to start designing it then.

+

The original Slayer Decision App was used as a base for the look and feel for the new app I + started creating. The original app can be found here.

+

There was a lot discussed on what could be added to the app; however, quite a bit of it was for + way later on once the app was made and working. So here is a list of what was planned for the first release.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Basic Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness (aka. Melee, Range, Magic)
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ + + + + + + \ No newline at end of file diff --git a/dist/pages/credits.html b/dist/pages/credits.html new file mode 100644 index 0000000..c8ca3f8 --- /dev/null +++ b/dist/pages/credits.html @@ -0,0 +1,81 @@ + + + + Credits + + + + + +
Go Back
+

Credit due where deserved

+

Assistance with Slayer Assistant for Alt1

+
    +
  • codedninja - + For creating the original app and inspiring the look and feel of this app
  • +
  • Skillbert - For all the assistance during + the creation of this app, as well as for creating Alt1 Toolkit
  • +
  • Zykrow - For support and assistance during the + entire development of this app
  • +
  • crazye97 - For all the assistance during the + development of this app, too much to specify each one
  • +
  • troy236 - For giving me the answer to why I + couldn't edit the src of an img in javascript
  • +
  • Emma Kitty - For helping manage the + database; formatting, adding manual entries, and adding user experience content to the app
  • +
  • Annie the Eagle - For help with + adjusting the Look and Feel of the app
  • +
  • MrSlayerGod - For suggestions on the + newest Look and Feel of the app
  • +
  • Poop Skewer - For suggesting moving the + app over to github for better uptime
  • +
  • display_this - For reporting app breaking bugs + that kept the app from running at its full potential
  • +
  • Leridon - For assisting me on getting the + slayer/reaper counter lookup started as well as helping fix major issues during upgrading alt1 source
  • +
  • Nex ex Umbra - For assitance on getting the + Select + your own task detection to work
  • +
  • overlord1234 + & David - For the Levenshtein distance algorithim for the search feature
  • +
+ +

Assistance with Slayer Assistant Database Updater

+
    +
  • Runescape Wiki - For having an amazing + database that I can just parse to make use of in this app
  • +
  • Chiev Hunter - For assistance in fixing + the slayer assignment wiki so my updater would quit throwing an error
  • +
  • Wahi - For explaining the Wights task was old + content that was removed
  • +
  • Robert571 - For suggesting the new query + search for database downloading from the wiki
  • +
  • Im Wired In - For all the assistance in + helping to figure out how to use the new query search for database downloading from the wiki
  • +
+ +

For Creating Something Amazing

+
    +
  • Jagex - For creating an amazing game that has + many more years to come
  • +
  • Runescape - For still being here after + all these years, it has came a long way
  • +
  • Runescape Wiki - For having an amazing + database for all of the RuneScape community
  • +
  • Chat GPT - For creating something + amazing that can assist with anything
  • +
  • Skillbert - For creating Alt1 Toolkit and + keeping it maintained
  • +
+ + + + + + + \ No newline at end of file diff --git a/dist/pages/doc/body.html b/dist/pages/doc/body.html new file mode 100644 index 0000000..23b883e --- /dev/null +++ b/dist/pages/doc/body.html @@ -0,0 +1,18 @@ + + +
+
+ \ No newline at end of file diff --git a/dist/pages/doc/dual.html b/dist/pages/doc/dual.html new file mode 100644 index 0000000..eb01f66 --- /dev/null +++ b/dist/pages/doc/dual.html @@ -0,0 +1,3 @@ +
+
+
\ No newline at end of file diff --git a/dist/pages/doc/example-extra.html b/dist/pages/doc/example-extra.html new file mode 100644 index 0000000..f79605b --- /dev/null +++ b/dist/pages/doc/example-extra.html @@ -0,0 +1,134 @@ +
+
+
Chaeldar Kills: Coming Soon...
+
Duradel Kills: Coming Soon...
+
Jacquelyn Kills: Coming Soon...
+
Kuradal Kills: Coming Soon...
+
Laniakea Kills: Coming Soon...
+
Mandrith Kills: Coming Soon...
+
Mazchna Kills: Coming Soon...
+
+
+ +
+
+
+
Stats
+ + + +
???
+
???
+
???
+
+ +
+
Exp
+ + +
???
+
???
+
+ +
+
Max Hit
+ + + + + +
???
+
???
+
???
+
???
+
???
+
+
+ +
+
Equipment
+
+
+
See More...
+
+
+
+
+
+
+
+
+
+
+ +
+
Locations
+
+
+
See More...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
Creatures
+
+ + + + +
+ +
+
Summary
+
Slayer Level
+
Slayer Exp
+ + +
???
+
???
+ +
+

Weakness

+ + +
+ +
+

Susceptible

+ + +
+
\ No newline at end of file diff --git a/dist/pages/doc/example.html b/dist/pages/doc/example.html new file mode 100644 index 0000000..4a8d762 --- /dev/null +++ b/dist/pages/doc/example.html @@ -0,0 +1,25 @@ +
(Default)
+ +
+
+ +
???
+
???
+
Exp:
+
???
+
+ +
+
Timer: +
??:??:??
+
+
Kills/Hr: +
?,???
+
+
XP/Hr: +
???,???
+
+
+ + +
\ No newline at end of file diff --git a/dist/pages/doc/single.html b/dist/pages/doc/single.html new file mode 100644 index 0000000..eb4fc4b --- /dev/null +++ b/dist/pages/doc/single.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/dist/pages/doc/suggested.html b/dist/pages/doc/suggested.html new file mode 100644 index 0000000..9d6588b --- /dev/null +++ b/dist/pages/doc/suggested.html @@ -0,0 +1,64 @@ +
(Suggested)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssignmentSlayer xp/hr
Gemstone dragons1400k (Hydrix)
Ripper Demon700k (Darklight)
Soul devourer680k
Shadow creatures680k (Manifest)
Nightmare650k
Lost Grove creatures610k (Golem)* +
Acheron mammoth600k
Corrupted creatures580k (Worker)
Elves560k* +
Living wyverns530k
Crystal shapeshifters500k
Greater demons1000k (Berserkers)* +
+
* - More information on hover
\ No newline at end of file diff --git a/dist/pages/settings.html b/dist/pages/settings.html new file mode 100644 index 0000000..d26e60b --- /dev/null +++ b/dist/pages/settings.html @@ -0,0 +1,73 @@ + + + + Slayer Assistant Settings + + + + + + +

Settings

+

More Coming soon... This is only the basic settings for now

+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
Close Settings
+ + + + + + \ No newline at end of file diff --git a/dist/styles/default/about.css b/dist/styles/default/about.css new file mode 100644 index 0000000..ab80731 --- /dev/null +++ b/dist/styles/default/about.css @@ -0,0 +1,32 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family:sans-serif; font-size:14px; overflow-x:hidden; margin:5px; width: calc(100% - 10px);} +h2{text-align: center; font-size: 22px; font-weight:normal;} +h2:first-child{margin-top:5px;} +h3{text-align: center; font-size: 18px; border-top:3px double rgb(255, 231, 185); font-weight:bold;} +h4{text-align: center; font-size: 16px; border-top:3px dashed rgb(255, 231, 185); font-weight:normal;} +table{margin:auto;} +img{width:100%;} +img.expanded{width:60%;} +img.collapsed{width:35%;} + +/* Sections */ +.info{text-align: center;} +.example{border: 1px solid rgb(84, 85, 66); margin-top: 5px; margin-bottom: 5px;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/dist/styles/default/changelog.css b/dist/styles/default/changelog.css new file mode 100644 index 0000000..34d996a --- /dev/null +++ b/dist/styles/default/changelog.css @@ -0,0 +1,22 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family: sans-serif; font-size: 14px; overflow-x: hidden; margin: 10px; width: calc(100% - 10px);} +h2{border-top:1px solid #A3A3A3; font-weight: normal; margin-top: 25px; margin-bottom: -10px; color: #068b1c;} +h2:first-child{margin-top:10px;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/dist/styles/default/credits.css b/dist/styles/default/credits.css new file mode 100644 index 0000000..f0367a6 --- /dev/null +++ b/dist/styles/default/credits.css @@ -0,0 +1,22 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family:sans-serif; font-size:14px; overflow-x:hidden; margin: 10px; width: calc(100% - 10px);} +h2{border-top:1px solid #A3A3A3; font-weight:normal; margin-top: 25px; margin-bottom:-10px; color:#068b1c;} +h2:first-child{margin-top:10px;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/dist/styles/default/index.css b/dist/styles/default/index.css new file mode 100644 index 0000000..a079ec4 --- /dev/null +++ b/dist/styles/default/index.css @@ -0,0 +1,190 @@ +/* Global App settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-decoration: none; cursor: pointer;} +a:hover {color: #a19100; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-decoration: none; cursor: pointer;} + +/* Base Sections of App */ +div#menubar {position: relative; width: 100%; height: 34px;} +div#base {position: relative; width: 100%; height: 70px;} +#copyright {position: relative; width: 100%; height: 13px; font-family: 'trajan-pro-3'; font-size: 11px; color: #5a6400; text-align: center; } +div.base-full {height: 310px;} +.copyright-limited {top: 0px;} +.copyright-full {top: 250px;} + +/* Menu Bar Controls */ +#infobutton {position: absolute; width: 12px; height: 12px; top: 00px; left: 00px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/infoicon.png') 0px 0px / cover;} +#menubutton {position: absolute; width: 12px; height: 12px; top: 16px; left: 00px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/settingscog.png') 0px 0px / cover;} +#donatebutton {position: absolute; width: 12px; height: 12px; top: 32px; left: 00px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/donate.png') 0px 0px / cover;} +#backbutton {position: absolute; width: 12px; height: 12px; top: 32px; left: 16px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/back.png') 0px 0px / cover;} +#forwardbutton {position: absolute; width: 12px; height: 12px; top: 32px; left: 32px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/forward.png') 0px 0px / cover;} +#infobutton:hover {background-position: 0px -12px;} +#menubutton:hover {background-position: 0px -12px;} +#donatebutton:hover {background-position: 0px -12px;} +#backbutton:hover {background-position: 0px -12px;} +#forwardbutton:hover {background-position: 0px -12px;} + +/* Search Box & Button */ +#search-info {position: relative; width: calc(100% - 20px - 100px); height: 20px; top: 3px; left: 18px; color:#a39e00; cursor:pointer; background-color:#2f2f2f;} +#search-button {position: absolute; width: 66px; height: 33px; top: 0px; right: 0px; color:#370042; font-size: 18px; text-align: left;} + +/* Search Button LookNFeel */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin-left: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active {-webkit-filter: brightness(1.2); filter: brightness(1.2);} +.nisbutton.fakeactive {-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Loading Spinner */ +.loading-container {position: absolute; width: 20px; height: 20px; top: 8px; right: 8px; cursor:pointer; } +.loading {width: 20px; height: 20px; display: flex; justify-content: center; visibility: hidden;} +.loading::after {width: 12px; height: 12px; content: ""; border: 3px dashed #13314e; border-radius: 100%; transform: rotate(0.125turn); animation: loading 2.5s ease-in-out infinite;} +@keyframes loading {to {transform: rotate(1.130turn);}} + +/* Division Bar */ +div.left {position: absolute; width: calc(050% - 01px); left: 00%;} +div.right {position: absolute; width: calc(050% - 01px); left: 50%;} +div.single {position: absolute; width: 100%; left: 00%;} +div#divide {position: absolute; width: 2px; left: calc(50% - 2px); background-color: #afad1f;} +.divide-limited {height: 65px;} +.divide-full {height: 310px;} + +/* Headers for Sections */ +div#title-1 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-2 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-3 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-4 {position: absolute; height: 11px; left: calc(15%); right: calc(15%); z-index: 22; margin-top: -06px; font-size: 12px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-5 {position: absolute; height: 11px; left: calc(15%); right: calc(15%); z-index: 22; margin-top: -08px; font-size: 12px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-6 {position: absolute; height: 11px; left: calc(15%); right: calc(15%); z-index: 22; margin-top: -08px; font-size: 12px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-7 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} + +/* Type of Assignment */ +div.type {position: relative; width: 100%; height: 22px; color: #008000; font-family: 'trajan-pro-3'; font-size: 20px; text-align: center;} +.right div.type {color: #ff0000;} +#type-reaper {color: #ffd700;} +#type-suggest {color: #ff00d4; cursor:pointer;} +#type-suggest:hover {color: #6d0077;} + +/* Suggested Creatures */ +span.starnote {position: relative; display: inline; color: #ffd700; font-size: 11px;} +div#footnote {position: relative; width: 100%; height: 015px; left: 0%; top: 0px; color: #ffd700; font-size: 11px; text-align: right;} +table#suggestions {position: relative; width: 100%; height: 200px; left: 0%; top: 0px; font-size: 16px; text-align: left;} +table#suggestions thead td {color: #ffd700; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +table#suggestions td {color: #39cf96; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +td[id^="suggestion"] {color: #008000; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; cursor:pointer;} +td[id^="suggestion"]:hover {color: #00db00;} + +/* Assignment Info */ +div.info {position: relative; width: 068%; height: 40px; left: 3px; top: 0px; margin-top: 5px; text-align: left;} +div.info div.task-wiki {position: absolute; width: 24px; height: 24px; left: 0px; top: -4px; cursor:pointer; text-align: left; background: transparent url("../../images/ui/default/wikipedia.png") 0px 0px / cover;} +div.info div.kills {position: absolute; width: 40px; height: 16px; left: 18px; top: 0px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.info div#slayer-exp-text {position: absolute; width: 33px; height: 16px; left: 3px; top: 20px; text-align: left;} +div.info div.name {position: absolute; width: calc(100% - 65px); height: 16px; left: 62px; top: 0px; text-align: left; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.info div.total-slayer-exp {position: absolute; width: calc(100% - 40px); height: 16px; left: 35px; top: 20px; text-align: left; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.left div.info {width: 100%;} +div.right div.info {width: 100%;} +div.info:hover {background-color: #324e6165;} +div.info div.task-wiki:hover {background-position:0px -24px;} + +/* Preview Task Wiki */ +div.preview-task-wiki {position: absolute; width: calc(100% - 8px); height: auto; left: 0px; top: 0px; z-index: 11; visibility: hidden; text-align: left; border: 2px ridge #a19100; background: url("../../images/ui/default/background.png");} +div.preview-task-wiki div.masters {position: relative; width: calc(100% - 8px); height: auto; left: 0px; top: 0px; text-align: left;} +div.preview-task-wiki div.masterTitle {position: relative; width: 100%; height: 27px; font-size: 18px; margin: 2px 0px 0px 3px; border-bottom: 3px double #a19100;} +div.preview-task-wiki div[class*="masterInfo"] {position: relative; width: 100%; height: 27px; cursor:pointer; font-size: 14px; padding: 2px 0px 0px 3px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.preview-task-wiki img[id^="masterImage"] {position: relative; width: 20px; height: 27px; cursor:pointer; vertical-align: middle; text-align: center;} +div.preview-task-wiki div[class*="masterInfo"]:hover {background-color: #64643065;} +div.left div.preview-task-wiki {left: 0px;} +div.right div.preview-task-wiki {left: 4px;} + +/* Status Menu */ +div.status {position: absolute; width: 100px; height: 60px; right: 0px; top: 2px; z-index: 10; text-align: left; border: 2px ridge #5a6400;} +div.status div.kills-per-text {position: absolute; width: 100%; height: calc(33% - 6px); left: 0px; top: 33%; padding-top: 2px; font-size: 16px; border-top: 1px solid #a19100; margin-top: -2px;} +div.status div.exp-per-text {position: absolute; width: 100%; height: calc(33% - 6px); left: 0px; top: 66%; padding-top: 2px; font-size: 16px; border-top: 1px solid #a19100; margin-top: -2px;} +div.status div.timer-text {position: absolute; width: 100%; height: calc(33% - 6px); left: 0px; top: 0%; padding-top: 2px; font-size: 16px; margin-top: -2px;} +div.status div.timer-value {position: absolute; width: calc(100% - 46px); height: 100%; left: 46px; top: 0px; padding: 2px 2px 0px 0px; font-size: 16px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.status div.kills-per-hour {position: absolute; width: calc(100% - 60px); height: 100%; left: 60px; top: 0px; padding: 2px 2px 0px 0px; font-size: 16px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.status div.exp-per-hour {position: absolute; width: calc(100% - 50px); height: 100%; left: 50px; top: 0px; padding: 2px 2px 0px 0px; font-size: 16px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.status div.timer-text:hover {background-color: #324e6165;} +div.status div.kills-per-text:hover {background-color: #324e6165;} +div.status div.exp-per-text:hover {background-color: #324e6165;} +div.left div.status {visibility: hidden;} +div.right div.status {visibility: hidden;} + +/* Extra Data (Not shown on limited) */ +div.extra-info {position: relative; width: 100%;} + +/* Equpiment */ +img#equip-image {position: relative; width: 18px; height: 18px;} +div.equipment {position: relative; width: calc(100% - 8px); height: 60px; left: 5px; top: 0px; padding-top: 3px; text-align: left; border-top: 3px double #a19100;} +div.equipment div[class*="equipInfo"] {position: relative; width: 100%; height: auto; text-align: left;} +div.equipment div.equipHidden {position: absolute; width: 100%; height: auto; left: 0px; top: 42px; z-index: 11; margin-left: -3px; visibility: hidden; border: 3px groove #778899; border-top-style:none; background: url("../../images/ui/default/background.png");} +div.equipment div.equipMore {position: absolute; width: 100%; height: 16px; left: 0px; top: 42px; cursor:pointer; text-decoration: underline; color: #778899; font-size: 10px; text-align: left;} +div.equipment div[class*="equipInfo"]:hover {background-color: #64643065;} +div.equipment div.equipMore:hover {background-color: #64643065;} + +/* Locations */ +img#location-image {position: relative; width: 18px; height: 18px;} +div.locations {position: relative; width: calc(100% - 8px); height: 60px; left: 5px; top: 0px; padding-top: 3px; text-align: left; border-top: 3px double #a19100;} +div.locations div[class*="locationInfo"] {position: relative; width: 100%; height: auto; text-align: left;} +div.locations div.locationHidden {position: absolute; width: 100%; height: auto; left: 0px; top: 42px; z-index: 11; margin-left: -3px; visibility: hidden; border: 3px groove #778899; border-top-style:none; background: url("../../images/ui/default/background.png");} +div.locations div.locationMore {position: absolute; width: 100%; height: 16px; left: 0px; top: 42px; cursor:pointer; text-decoration: underline; color: #778899; font-size: 10px; text-align: left;} +div.locations div[class*="locationInfo"]:hover {background-color: #64643065;} +div.locations div.locationMore:hover {background-color: #64643065;} + +/* Creature Wiki */ +div#creature-container {position: relative; width: calc(100% - 08px); height: 32px; left: 03px; top: 0px; padding-top: 3px; border-top: 3px double #a19100;} +select.creatures {position: absolute; width: calc(64% - 10px); height: 20px; left: 24px; top: 9px; cursor:pointer; background-color: #2f2f2f;} +select.variants {position: absolute; width: calc(34.5% - 15px); height: 20px; left: calc(65% + 16px); top: 9px; cursor:pointer; background-color: #2f2f2f;} +div.creature-wiki {position: absolute; width: 24px; height: 24px; left: -2px; top: 5px; cursor:pointer; text-align: left; background: transparent url("../../images/ui/default/wikipedia.png") 0px 0px / cover;} +div.creature-wiki:hover {background-position: 0px -24px;} + +/* Creature Wiki Preview */ +div.preview-creature-wiki {position: absolute; width: calc(100% - 6px); height: 178px; left: 0px; top: -42px; z-index: 11; visibility: hidden; border: 2px ridge #a19100; background: url("../../images/ui/default/background.png"); text-align: left;} +div.preview-creature-wiki div.image-container {position: absolute; width: 50%; height: 50%; left: 0px; top: 0px; border-top: 1px solid #a19100; border-right: 1px ridge #a19100;} +div.preview-creature-wiki div.stats {position: absolute; width: 50%; height: 50%; left: 50%; top: 0px; font-size: 12px; text-align: center; border-top: 1px solid #a19100;} +div.preview-creature-wiki div.exp {position: absolute; width: 50%; height: 50%; left: 0px; top: 50%; font-size: 12px; text-align: center; border-top: 3px double #a19100; border-right: 1px ridge #a19100; padding-top: -1px;} +div.preview-creature-wiki div.max-hits {position: absolute; width: 50%; height: 50%; left: 50%; top: 50%; font-size: 12px; text-align: center; border-top: 3px double #a19100; padding-top: -1px;} +div.preview-creature-wiki img.image {display: block; margin-left: auto; margin-right: auto; background-color: transparent;} +div.preview-creature-wiki div.image-container:hover {background-color: #64643065;} +div.preview-creature-wiki div.stats:hover {background-color: #64643065;} +div.preview-creature-wiki div.exp:hover {background-color: #64643065;} +div.preview-creature-wiki div.max-hits:hover {background-color: #64643065;} +div.left div.preview-creature-wiki {left: -2px;} +div.right div.preview-creature-wiki {left: 3px;} + +/* Summary */ +div.summary {position: relative; width: calc(100% - 8px); height: 75px; left: 5px; top: 0px; padding-top: 3px; font-size: 12px; text-align: center; border-top: 3px double #a19100;} +div.summary:hover {background-color: #324e6165;} + +div.summary div.weaknessBox {position: absolute; width: 048%; height: 35px; left: 50%; top: 5px; font-size: 12px; text-align: center;} +div.summary div.weaknessBox img {position: relative; width: 18px; height: 18px; padding: 0px 3px 0px 3px;} +div.summary div.weaknessBox p#weakness-text {margin: 0px; padding: 0px;} + +div.summary div.susceptibleBox {position: absolute; width: 048%; height: 35px; left: 50%; top: 40px; font-size: 12px; text-align: center;} +div.summary div.susceptibleBox img {position: relative; width: 18px; height: 18px; padding: 0px 3px 0px 3px;} +div.summary div.susceptibleBox p#susceptible-text {margin: 0px; padding: 0px;} + +/* Third Sections */ +img.first-third-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 10px;} +img.second-third-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 28px;} +img.third-third-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 43px;} + +.first-third {position: absolute; width: 50%; height: 12px; left: 25px; top: 10px; font-size: 10px; text-align: left;} +.second-third {position: absolute; width: 50%; height: 12px; left: 25px; top: 28px; font-size: 10px; text-align: left;} +.third-third {position: absolute; width: 50%; height: 12px; left: 25px; top: 46px; font-size: 10px; text-align: left;} + +/* Quarter Sections */ +img.first-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 8px;} +img.second-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 23px;} +img.third-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 38px;} +img.forth-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 53px;} +img.fifth-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 68px;} + +.first-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 10px; font-size: 10px; text-align: left;} +.second-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 26px; font-size: 10px; text-align: left;} +.third-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 40px; font-size: 10px; text-align: left;} +.forth-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 55px; font-size: 10px; text-align: left;} +.fifth-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 70px; font-size: 10px; text-align: left;} \ No newline at end of file diff --git a/dist/styles/default/settings.css b/dist/styles/default/settings.css new file mode 100644 index 0000000..e906e8e --- /dev/null +++ b/dist/styles/default/settings.css @@ -0,0 +1,23 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family:sans-serif; font-size:14px; overflow-x:hidden; margin: 10px; width: calc(100% - 10px)} +h2{border-top:1px solid #000; font-weight:normal;} +h2:first-child{margin-top:5px;} +table{margin:auto;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/old_bundle.js b/old_bundle.js new file mode 100644 index 0000000..3f182b6 --- /dev/null +++ b/old_bundle.js @@ -0,0 +1,6721 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory((function webpackLoadOptionalExternalModule() { try { return require("sharp"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("canvas"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("electron/common"); } catch(e) {} }())); + else if(typeof define === 'function' && define.amd) + define(["sharp", "canvas", "electron/common"], factory); + else if(typeof exports === 'object') + exports["SlayerAssistant"] = factory((function webpackLoadOptionalExternalModule() { try { return require("sharp"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("canvas"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require("electron/common"); } catch(e) {} }())); + else + root["SlayerAssistant"] = factory(root["sharp"], root["canvas"], root["electron/common"]); +})(self, (__WEBPACK_EXTERNAL_MODULE_sharp__, __WEBPACK_EXTERNAL_MODULE_canvas__, __WEBPACK_EXTERNAL_MODULE_electron_common__) => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./images/data/reaper_collapsed_OSL.data.png": +/*!***************************************************!*\ + !*** ./images/data/reaper_collapsed_OSL.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAVXG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKrnKwAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAElUlEQVRYw92YTWgcZRjHfzsz+5HdzczuJumuJS3VSkI/AlaFgmK1PVStIJTSQy9FELy0gqIgIhYlUFHpQQ9tQZFCKWLVQ/FQ60GFUtAG0dqvNG0sRtc07WZ3Z3Zmdmd2Z8bDdiabTWJjipD4v8z7Mc/H+/m8zz/06p5dHrchdyYA0CoGvSt60coltIoBQMOt06h7JJJJACzLwK7VEMQosWiETFcGVdMBUOQkplmlVq1imhVy2Vygc+TK5aAudybu2O77oFVMnnwsyQPrN6KW4yB0MifcCiF7iND+fXu8H88OkU5349o1VENHFMM4Th0lkUSIxCiVCswX85X1/5urvV3Pb9d/55N3t2DWltHwVkEoMrcTng32JSR/tjVNDYzJsjI10Jo1p47ZJsTXoRo6GPqcsrKszDpwv32GDyEw1Bs4ngjh9JRAKAahKHgWeLWWAVaR/LLj1BkbywMwNpanI9bcotWaEfxv2XZQjkYiXL12nWhk5gwqioKqqli2Pa2/te7bmqu93Qe77nDu/BDr+w28RnNSQkIExCwISXB1cCbw3KaPIa+IpMjJaVvk50v5EHeNPP8Fdr8BZz4qeAe/tPn1WhzPq/H23g2sWrmai1eGGTx0HkVR6O8t88L2BIJpVpFlhXS6G0VRWOw49UOVc6NZUqkcHYleTnz/F43aCF99e4munpWsXf8Q48YAZ87pCLVqlVKp0NzfqrroB/fUth1YtonjuFh2nQ0DywlHQqy7z2OyWMYydAqTt3h4IIdgmpXgAmg9U4sVXekI772coSMRYuvm+xm4Z4TXD/zC4w92sPVRhZJe4YPBZ0kIfyDlsjny4zcRxfCsl8Niw9Gjx3j6kQTvv7QJt6Fx+DOH4TGZL04rPL+9j7pVoFE8wqmzIoIfpGeLOYsR3/y0mlc+dLlw4TSm/idqxcbDYdJIoZcvMjxymdcOCYzXn0HqXdHL1dFRlgpi0TCuu4J3jqq8uCPP3p1J9uIBo1wY0fn45HKW53pYt7YfSSuXAkE/rix2CIKAnExy4FOLG4Uqoijguh49mTir700gigJauYTkb8t0uptbN8tLZgU9z+G7z3czdL7AeAEycp2+zq8ZPBYP3seSf1tqmjrtNbLYIYph3hw8zM7NFhuzMFGEgycl6o5AWALTrCD19a8hP34Tx6kviVDgIyyJXBtfxVtH6jQcF0kU0E2N/r5mf1//mulnbimEgumrJxDviAZ1x50qa+VSMxSIYnjGw3gpwvdfFMNoFQMh05UJ8qeltnLtiEYiQRKQ6cog+PncUgnid0KQT2o6Av9jCH4+93+CKIZR5CRScbIYpPYdsQT79+3xipNFapaN61hEYjGW9WTnRf60EkrzJYzaSahlPVkWav/48RMBVVGcLBJ6btc2DyCb7cHQdXSjCjCD37gToaMkmqxYKym0EJl0unvB9uV0mkQyycTELQCkVCpOuWwyPHz5H1mqVsWtDvg3rWrogbPth/vfyMw1qPnoUm8TUul0N6lUHKlR9zg7NDQjiPukTfsXQFV1bKtBWStNk2knlRYiczf2p2LddbY8sYm/ATWM+pwqaFlsAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./images/data/reaper_collapsed_RS3.data.png": +/*!***************************************************!*\ + !*** ./images/data/reaper_collapsed_RS3.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAXKm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQRroAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAFsUlEQVRYw9WYXYglRxXHf11d3dX39p3vnZ3sRtZ8sZF86K4JRo2oD+JDFGEhYlDfonnOQ4jowz7qg/omq0YQCYgo+CCDUUEkGgzCIOaDXU1wY3CdZDc7M3vvnXvvVHV9tA99u2auIaJvMweaunWr6lT/65w+dc4/+cwXHqt3rl9FpCkAaSppxXvHQQnek+UKAFuZ+Ptgv229d9R1QMocAOcq6lDPzDnYAjO6236rx1nHE48scuaeBxj0uyDmeEcJuyTVBvLvr1ziX69fRgiBSFOctYTgWVhawWiNsxUyywnBI0RzAJXRAMgsI1cKPZngnCVXBUKkOFsBUHS7OLt/QJXRcZ/2sBo9eRyTWT6zJ0CnWzLc2eJ95x9hPBxAssR/lURRJ8sIgFwVhBDIlSJXBVJmDG5sIzMZN2tfztmKbq8XwU5GI5yzFJ0ygm5FTyYNiOlLdns9RJoiRPOEEAghxINyzlIZjcxyVFEQfLPH7qAPwHhwFae3IQzAX2+esAt11bTxvwHUe0gpGzcUQuCsQxVFfIzWpKmMfQDnPd5aTt12mvFoNDMmM4kqStI0wU2t4q0FQBUFznvyokOCIE2TGX0A8wuLhANrllePY7RGFQWpELz48gb33DmmdluNgUQO6RqIHoQR+GvUoTFEUu+Q3HX/R+qrm/8keE85N8/m5b8mHGL54w969YWfV/zhJUUnM3zj8fu45dTtXHzlb5y/cAnrEj5+xvLYubJxSyFSRJpGCxxmeeb5CesbS+y6OW74k/zi2Tdw+lXWf3eJ0L2VvWSF9Y0lfv/nYQMOwE1d4bDLpz79MGk9oQ41lTacvfckWZ5w9201zlbYyqDSwAfPnkRIKamMJlfFkQC3spTzw/M3cf975vnyZ+/i3hOv8tVvv8DH3t/h3IdrPvTeE/zsu5+jFFeQzrlptPRHAtzTT/+Yhx4s+ebjHyW4Id/7qefZl3LueG6ZR8+dxpot3M6PeOZPgnhjC5FitD704J767btZf/4qT3z+OW551wqD3Yr5Mmd7vMiof5F/XNnhWz9xaHUfydkHP1Ffef0yldEcW7uJ1y7+5VBHy8XjN9eJENR2wtcfHXL37b04dvHyiK98v0NeLnPq1juQxmhkJoHiSFiuTRGtTfnaUzm7ozGJENR1YHmppFN2EXmGMbpxS2cdldFH4ipor6xQjXjhl19i4+Ut3tyC5XnL6blf89CTGmebHFUqVcRoeRTAAewO+qSp4snzF/jiJy0PrMG1HfjOrxSORZzRKFU0lgvBx/zx0FtOpAjhSWXG+sYiv3lRIURCZSpWjq8RwnaM/M03J7OmIvCH/zpovasymk63SeC99yRCEKZuKwFjNEKpImbq/ghkKUZr9N64qSKm3iazPCbpMZVUBcIYjRDpkQkozlYUnTLWlvvuKlBFMa0L08ZyHFFpC9pcqWnNGN7+fZa9eSqjmVtYPDL33EEw7TUmswyjGxyV0ZS9+f1KfG8yJs2yQw9KZvmUIchmKv9OtyTNMvYm41gEyPFouM9x6D3uPPOB2k4DS9Ep0Xvjt7XZ9BDSKfnjXYW1lt7cPKPdYVzrXUUq8zhedMqZ+W2/1WmtjW2r4+D8LMtIZY7eG7N8bC3qb9cP+jcilvFo2Fzirf9WxnDtjU1CCAghprxKwbDfn3Im/Th33z08wXuKbpe33tyk6JQ4WxFCoNvrURkTSaNWX5s09He2Yx15sDLJlaIyhspsRivkSjEaDiLgnetvUXS7TEajmIAc3CtGS+fsTHrTslAHy6CG0PGRqZKZJARPZTQhhBmWq33Z0XAw4zrdXg9nK/LpgQbvp4yZiGE9eB+JpRZIZRouR4gm9WrnOuuYW1gEYHBjez/YONvklsdWV/8/n5cS5xwtseSc+5/XvJN4V9Et55lMRjO86X/qWFldwznHwtIKShWRVx3tDjh+4uaZ+cdWV/k3rAQo1Oy03j4AAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/reaper_expanded_OSL.data.png": +/*!**************************************************!*\ + !*** ./images/data/reaper_expanded_OSL.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAa4G5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ePXqQAAAYVub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqIw0NAAANGG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+dZ7WgAAAAZub1BFAAAAAAAA7Gu72AAAAAlub1BFAAAAAAAAAAAAoYpy1QAAAAdub1BFAAAAAAAAAFrm3tAAAAh/SURBVHja7ZxvbBt3Gcc/vnNsJ3Z8sZM0aedMZR0J7VqgA2looMGKNHXrNGma9mIgjaIheNEiDRWpmvivakyA9gJerEUgNFQNhIAXE0JjvABENQGtEGXr2qysILUN6R8n9p3vj3323fHCvYu9JKV/k3P3fKQo9tm/ex4/9/j8u+f33Dfx5V1PBFwiP5gFwKhZlCZKGNUKRs0CoOU3aTUDsrkcAI2GhVuvo6hpMukUxeEiumECoOVz2LZD3XGw7RrjY+PRPk++dSJ6nh/M/t/tK+nDzbQlcb28LcvxeOSTRT64+R706gAogyyLXyPhHiHx7a/vCv52+AiFwgi+W0e3TFS1D89romVzKKkMlUqZK+VKx4bvW277SvqwErau9r3vtrhWqhY/+c427PoaWsF6SKSWdyRwwT1OMvxGGYYefeh8XltI5Hpj2X0slfDhPnTLBMtcdmw+ry35YcLtK+nDStiSuF7eVrPhY+nn8AIV+goLLyYykEhD0ICg3pHADom9T38mmJ4+AcDp0zPRa/2Z9hTCqVvRtobrRo/TqRQN1yWdWvwN0TQNXdcXvb7c+5fbvpI+rJQtievSthIJlb07M2ye2kSQKLbzVkmBOgZKDnwTvPMEfntsIpgnqeVzXT81/zg+k+C6mWH1mbkFbd3acX3yK/Daj8rBC792ef3tAYKgzrd2b2X97Rt4861p9u1/A03TmCpV+fyjWRTbdsjnNQqFETRNQxBWk1f/6vD6v9cyNDROf7bEy3/6L636SX7zh+MMj97Ops0fYtbawmv/NFHqjkOlUm7PTXRdoiesKtsfeox6w8TzfBpuk61b1tGXSnDXHQFz81Ualkl57iIf3jKOYtu1aBLeORcRhNVguJDiu18q0p9N8MD9d7Jl7Umeef4oH7+7nwc+qlExa3x/3yNklTMkx8fGmZm9gKr2LTnhFoSV5ODBl3jw3izfe/o+/JbBgV94TJ/O86tDGk89OkmzUaY1/yKvHlZRwuLxUrVBQVhpfv/3Dez5gc+xY4ewzbPoNZcAjzlrCLP6JtMnT7B3v8JscwfJ0kSJf506JVETYkEm3YfvT/DcQZ0vPjbD7sdz7CYATnHspMmPX1nHuvFR7to0RdKoVqKBYU1OEFYTRVHI53I8//MG58oOqqrg+wGjxQE2vCeLqioY1QrJcNpQKIxw8UJVIifEgiDw+OMvn+TIG2Vmy1DMN5kc/B37XhoA2n0iybDaYBh61yqIIKwmqtrH1/Yd4PH7G9wzBufn4YVXkjQ9hb4k2HaN5OTURmZmL+B5TSmVCbGhL6ny9ux6vvlik5bnk1QVTNtgarL9+uTUxu45r5TKhHidfRUG+tPRc89feGxUK+1Smar2AciZV4g1YX6qah9GzUIpDhej3ks58wpxJp1KRU1kxeEiStjPK4sUQi8Q9RQbJoqEQ+hVlLCfVxB650KuDy2fW+jnBaSfV4g1YX7m8xq27Sz08wLSzyvEmjA/K5UydcdZ6OftLEUIQhzpzE/brqGEmgJhKUIQ4kpnfo6PjXcvUghCr1ywGTULpTRRkhqv0FN4XpPSRAnFqFbQsm3pHennFeJMmJ9aNrfQ26CkMhQKIxIdIfYUCiMoqUx72pAfzEalMunnFeJMmJ+VSpn8YHbhBkzfrUt0hNgT5ml0wQaXxNMEIeaEeRpdsIXlB0GIO2GeRjdgdgrtfeFTOwIJkRBHDh89GvWeGzVrsW7DD3/2W4mSEEu2broNWKjzJsM6r26ZYR0tIWES4kh/JhtAR503mUpjXlKtllKZEGfC/DTrDZKpNMnOfl5dN4mHgLEgLEbTtGgxraufV/R5hbij6zq+W1/czyv6vELcabhuVOft6ueVW9+FuBPe+g4d/bxh+UEQ4k6Yp13Lw4LQS3QtD4P08wrxpjM/o35eQPp5hZ4gzFOjZi1UG0SfV4g7Tt3CMPSFasPk1MZoIiylMiHONFw3umCbnNrYPeeVUpkQZzrzU/R5hZ4784Lo8wo9euYVfV6hZxF9XuGWQPR5hZ5D9HmFnkP0eYWeRfR5hZ5F9HmFnkX0eYVb4oJN9HmFnkT0eYWeQ/R5hZ5G9HmFnkT0eYWeRvR5hZ5F9HmFnuWy+rz33j0ZACRV9aY5oCSW2Lfqt/977UY3P/BWNCihT9dr1/N9qoZFparz3Ofex54DJ1i7poiW68cPgmuO643y73K0vIV9x/H41yyjS593UZ03qao31fHlj7qy6om7bGCvkCAIcOou5y7qfHXnBO9f4/Dpj5U4d7GK02gSBMGq+ncl9MLxj22dd6UT90bSbHqUKzU+sjnLwx9o4lbLPDzVxx2jaeaqNVqeL7/713H8F9V546DP6wde9NerXx4/CDDtOs2mw7OfHcVzdPyWS70yx57tt2FbNk7dxQ+C2H65V+WMexXH/536vFE/b6EwsmL9vJ1Oxilhr8uXIMBttfjGU3cyWugnOThKZmQdmcIwY8UBdu14L82mB9eQvDfEv5ieXa/mM4X6vGE/bzLs59WyOXRdZzCbf1dOD67Xn0QiQbY/zbM/Pcsz+xt4HVMEVVXIDaQZKQySSCRuiXitRrxDfV7dMhkpaiShveRWqZTpz2TZ/uA25ufmqTdcfK9BKpNhzegY4Y2aWj6HbTvUHQfbrjE+No5RsyhNlDCqFcJFj+Jw8arHtPwma0bHxL7YX9L+oT//Bd0yo1aGxM4nHgoAxsZGsUwT03IAoiXjzvraUt1n4fbwok9JZaKx1zImdEzsi/13jlm3dpxsLsf58xfbc/ShoQGqVZvp6RPLFoU9r9nlRKeBsO6mW2bkTGdJ42rHLBc0sS/2z5w9E+1raGiAZKsZcPjIEaC7U73huqRTqUX/23MPE7fRompUusaEpYzwqvBaxoh9sX85++1bgf7Dtk/cx/8A/EcyrqMdMKAAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/reaper_expanded_RS3.data.png": +/*!**************************************************!*\ + !*** ./images/data/reaper_expanded_RS3.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAe825vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz2Q1aAAABhW5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKojDQ0AAA0Ybm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD51ntaAAAABm5vUEUAAAAAAADsa7vYAAAACW5vUEUAAAAAAAAAAAChinLVAAAAB25vUEUAAAAAAAAAWube0AAAD3VJREFUeNrtXWuobddV/tZ8rLX24+xzzj335t7cpOmNaaJN0+ZVaDWlthCQVi0EFdGCSpUo4o/+0BZ/GPwjAR8IovUFPgoiKiI1UBVsNRSLcCmWliS2GtMm5nlfZ5+z99prPpc/5hpzz71z06Zau/e9zA8u+9y11nyNMdZcY4455hjFBz74cHf5wktgnAMAOBcgOGeRwjsHWVYAAKNV/Dv9P/06Z9F1HkKUAABrNTrfrTyT/gJYqZv+n9ZD/eFcwDkL7xwY5/H/1HejFRjnK/fT8VSDAdRiEcdEz6T9IXqk46Y20v6l46W+Ufn1OtO6v1Z767RepzH1Ix0zje9a5V8zO8ZHPniAe+56B6aHQ4Dt4DXhj1Ho8xD/+aUn8d9feRqMMTDOYY2B9w67+wdQbQtrNIQs4b0DY4HAWrUAACElyqpC2zSw1qCsajDGYY0GANTDIaxZElCrNrZDxAz1lPGekOVKmwAwGI4wPz4CgBUmW2MgpIR3DkKWyXUNxjnKqoJWKvbJe4+yquNz7WIOxni8RmNc7//6c1R/2v+qrnE8PVzpD9UjZAkhBbRSK/1mjEdapvQnujaz2VXpxThfKZvyS6v2muQfug533/EDmB9NgWIfXxNFha44AQYAZVX3jK1QVjWEkJheuQQhxQoTtArEGI7HkRjNbAZrDerBKBIlCkfTROICwHA8joRnjMN7D+99JKS1Blq1URi8C20cTw8jkegalWGM90zXPdEEvPewxqwIrpAlhuNxL8ShP2VV92N34bpz8N71wlbGvgshsbO7t1J22YdAn0UzD3X1ghuEyCeMsrDGREElIWOMrdCfMdYLpgq8kGUsFwTCw7vQX+p/yq9rlX/OGsynL8G2lwA/BdyF8M8fA50Ov/HaFOgWKN72zvd0Lzz31cjgqg6zS1XXUO1yMHTdOgdnDHb3DzCfzWCNivea+QxVPQLnBWz/Vrqe8FVdx2sFGDgvVuoDACkl/FoZ6gP9XdU1nOvAefGqe0JWsEatMID6lj7rXIcOHoLzV9XBpYztr4NLGcsIWcUxUP1cyjhmapfupf1Ix5XWuV4mpVtap3UOop/B1vufjvta4l9zfIxf/WmLu779TnTFidAOKwF+GmBjwM8A9zI6H17EoruM4s63v6t76fln4Z3DaGeC559+qkBGxobwL3847j721xqPf6HEUGo8+uH7ce6W2/DEl/4dj3zsSRhb4D33GDz80CioDTR1p29+RsYm8MnPNnjs/D5anMQri5P4xD+/ANt+GY99+kn44a1YFAd47Pw+Hv/cURBeUp4zMjaN7/2+HwTvGjhnYbXGvW89C1kWeMu3dbBGw2iFinu8896zYEIIaNWurMIzMjaFg/0Sf/TIGdx3+wg/8yN34603fhm/+Bufx3ffN8BD39XhO992I/7yd38YI/YchLU2rrgzMjaNj3/8z/D+B0b4tQ+/G94e4ff+wuHxL1Z402dO4CcfugNGXYS9/Cf45L8yRIs2Y3xldZqRsQn8wT++EX/72RfxCz/6GZy7+QDTY41RLXBpvofZ4RN45rnL+PU/t2ir+1Hc+8CD3XNfeRpatTh5+gz+64l/y9aGjI3hzLnbO6MNbDvFoz81w1tuG8d7Tzw9w0d/f4BydAK33PomCKVaCCkA1Hnmzdg4rLEoigIoJB754yEuX56hYAUKFNjfH2EwGoKVEkq1QW2wxkKrNpvKMrYC3juUJcfn/uYncP6LF/HiReDExOCOnb/H+z/SwprgQyGqqo7Whiy8GVshuFUFrYCf/6XfwY99j8U7TgMvXwZ+++8qWOzBqhZVVYeZl/b2MzI2DXJIKqsan3riJvzD5zXq4QhtM8f+wSl4f2npX6JUCyFkcG5x2VyWsVm0TRNNt0ZrjCd7WMznkGUNj+CVJkTQeVlV1dFTyOVdtoyNqw0+eAb2E6lqg/edVi2cMUtXhqoOMy/5hmadN2PzakMNayzq4RBlVaNdzHvXUImqrnu/YR5m3kyujG1CVdewRqNtGggpUA9GKKvqqs+y0XgCrVrs7O5lO2/GxrFo5sGB3hrMjqb9IQOLsqqg2iCnWrUYjSfLkxSLZh6dqTMyNoVwQsP1M27dH0XSmB1NwaWMJ1aCtaFtYqHxeJKpl7FxpO65Wql4TGk8nsQjRKptwswbzn05zGezTLmMjYLO9lV1Hc/KkUFhPpv1ZwyDPxmz1vanVPmrzn9lZGzC2kBqLB0Y3dnd6zfSVHJo1AZndNHrutlUlrF5lUFH1SBoBSWmVy6hHoyifAopIYQIzuhLPSJbGzI2CzpKH+Jk8GjXTeWTMR5m3lAgbwtnbI/aYI1Gu5jHmXbv5KkVGY2+DUKIZIquMvUyNr5gA4DxZBfH00OUVY3Z9LAP5rKUTyFEWLDp3iE9DaKRkbEpjHYmMVoP+Tl478F50YfNamGtDf68QkhYY7POm7EVasP8+KgPJeXQzGY4efoMVNv2sdcshJCJYw4Puxp5hy1j06jqGqOdSVQdvHdo5rO4A+x9iCy5dInsV3PZJTJj0zieHkYNoG0a7O4foG0a+CQmGmOJSyT5S+7uH2TqZWxcbSCLAuMci2Ye7+3uH8QdOKXaoPPSFly7mOO9P/TjXSZhxjbiq09+IcpqVdUQztkY61W1Lf7pr/40UyljK3HTbW+OdmDnLB3A9LBGk1E428sythUdRbgHQF5l2bch49qwRKTyygBAViGEvXNZ3c3YXpB8krwyzgVUs4g7GBkZ2wrOC3jvoZoFOBdB511Po5SRsa1IsxEJpdq4d5y3hzO2GSGGQ1isKdUuvcpE3hrOuAZAciqECDpvmi8sI2PbEdZnvc6b81FkXDs6bzhhEWbfmK3RZTtvxtaDUukKWQY7787uHoTIOm/GNaDz9ql0AYDNZ0cxxE5GxvYv2Eosmjnms6PezstC9susNmRsM9bzSLOqD+Sb+k1mZGwrFs08rM+iM3ofyDdHRs/YZpB8eueW8XmFLMPR4rxNnLHN+i7n/RH4cqk2WKMhZJm9yjK2Gs51IXav0aunhwHkQHsZ26029PK5cnqYopRka0PGtWBt0H0eNiZkGU1l2assY5uh2jbG7RWyBKPDl4tmnmfejK2feSmsvzU66LwAVmKiZmRsK2K4U9WC7R+cioH2MjK2HRRob//gFNiVSxdCsramyZsUGdttbXAupne9cunCahLBvEmRsdWz7pp8RlMZ4xyyzMGlM7YXsqzAOF+ayoDlSYrZ0TRTKGNrQfK5TCLYn6LI1oaMa8XaQFEiGRAyDmZ/3oxtB8koZcgUQogYIdI5mymUsbVo5rM+iXa9zMNmjQYATPb2cOLGWzprDISUsMZE/YI8z9Z/vXfwLgQCTp+P5o3+OfKfEFJGtzZql/6uh0M0SQpZxhiELNEu5qgHo5U2KaUnRVDRqo3n8MjRiIKp0I6M9x6MsXgNQKyL6ibQuOrhELOjaWzfe4/heAytVCxH9WnVQpYl9KIB93P85s/eiZ/7rafAqhFEWaGqa2iloFUb2y+rKtZP9CI6lFWYaebHR2CcR9UupTl9OYlf67/XE/+GozEuX3gl9MtaOknhk86aUCHjYIzFDQzqIOWvoLCoQQfxUZEOKebDoNYdfpYC42NdqcDMjqbw3i0V8sQ0EjLALNMOhFOkbOmLLGSsyzsXLSgxoiDny+eTnF6kQxGDKA9zOFHtYc3q16isasyOpnFsADAcj0OM47KCbhdomxl+5eFzuOeGFh967xugF3NYrdD2p1VIULVqwbmIviVEN2tsPGQ4vXIJo51J8qK4yNSr8et65t9yYvGvtjbQmzXamazMRFqpGGZd9ycvyqqODC+TvBZEiHR2IYcfIsZwPI6EJ4aQgxC9ofRMyuyyP7JEQkcDCgzxcRaguuIJkSQlqPcutqFV2+e3NXGmCJ+lqiemhFYt6sGoF4Ky17XkCiO1UglTFR68f4Lvv9tAH17EB75D4q6bB/DWAEWxMtsLIaHaNvqWCFlitDOBkAKqbdEu5vEZEpYwq5ZRUNf5db3z76rWhlTqqbPpW1RWFawxGE92ceLUDcknQy7zuEkeiVJWNbjk8S0N12Vfj0U9HEJIiXo4jLMKDS4QWUWhCp5EDGVVxQEJKWM5EryUwNQPGjQxn8rUw2FM0lwmtm6aDalfKSiRM9UrpIhlvQuJnUfC4NEP3QC3mMJbjfbKJXz0fTdDdC28dfDW9kIn4gxEzCRBodmevKfSr6LoM+LQ53SdX9cz/0i4ydrAz91x1y+//MKzYJyjKBhUu0DX+f7tNTC615GsgfcesiwxvXIZXdehYAXKqkJRhM9T0W/YWaNhrYHVvQ5VAM5aVINBZAx9QroudHgwCrNb0X/yVLsIyeQWDbx36LoOWikMRiMYreGcQ8EKcCFhtMZgNIL3HgUr4KyNguichSyr2F6qIoTPUgh3xYVAUTBQmgNrDBjn4ELAGg1ZVuFva9B1HoxztIsGzllwLuC7DvAOjz78Rtx3+wCFkNB+Am2G2N0b4/TJCc4/s4C1pq8z0PPUmbM4nh6iGtT9LN6i60IOMto0Ivp0XRfLCSlRFCz2h/jlnLtu+ceFgNFhzXD2DbeiuPPt7+peePYZCFlisreHV158fkX/oAUJvXVaqfj2pAsfimRCbxC9IeniAQAG4xHmR0cYT3ZDuaaJn4ygO1JGThkXTEQw+pSliwh6260xcSG1fM5EvYqu0SIhXQikC42Tp8/glRefj6rC+gKPXgCqO+rTBYPWLaxqYbRC13kURYGu6yCEBOMCKArsnTydqBkuqiXpl+Fq7RAdaHYl+tJCh/hFqsb1yL+Tp8/g6PAQ1micvaUX3ldefL7/xFTY3duH6TtaD0ZxpZj+yl6J5qKPqG41jDEY70wwOz6KZZ3V4KKM90n3Wf8/1WmMib+prkTPSynBxXL1SvWn5eNWYv9s2pazOt5f7/t6X9bLUpvpM1TPOo3SRQnRhOpM76VlqG/rNKB2Xosn6/SiPl+P/Lt88eVo5bnhxptQ3PvAg90z//HUitnkW2FSSt+4dWWeZohvpkmJZpB0Zktn1nS1nc5ar9eElM5YmzQBrv9ej/yzRuPW298cFmypCeNbYlIiover3rBy1pExlDT5m2FSCouPKlmdi2gOKqsa9XAYFxCpGShdeVN/aSxLm6eI92nF/PVMSLSg+f8yAV7P/IsThzVQqkXx7vc91F28cOF173IIIULG7T4otbX2dZd5LTirMRxN0DQzcC5es460vaqq447g7Hi68rkGEBdS3yi+Xl//r2W/Ufr9b8dxvfPv5KlT+B8FiFlLoxQJ6gAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./images/data/slayer_collapsed_OSL.data.png": +/*!***************************************************!*\ + !*** ./images/data/slayer_collapsed_OSL.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAXWm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALW4o8EAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAFNklEQVRYw92YaWxUVRTHf/OWWTqvM53ptNOBVpaCLAo0ERqQILhEwEACiYnBxIiJ3wgJGhPBKAlI+KhGTEAxhEQxBgyRoAgRiQGRpUqlu0AFStuhU2Z5s79Z+vxQZugaKmAy8P/y3jvvnXvOefeee+75G95Zt0bnNmzFVgDCkRiVVZWEQ0HCkRgAmb40mbSOVVEA0LQYqWQSQTRhNhlxljpRw1EA7DaFeDxBMpEgHo9Q4a7Ij3np79b8s63Yelf5UB+0ZBaDKBGJxglHVDJaCoMg033zFlbXBHbu+JgPt24j/s8pDNs3r9PPna/D4XDRl0qixqKIokw2m8ZuVRCMZoLBW4wVY9XNfTeafKRxNC2NPxil0+tHNlupnjABk6WYxpYG5tUuYPsnOzn63ddcvFhPV90xpNzfDofVvDGbzX4n0KQ2aiAj/ZDcGGosCrHoqLo2m33EwHPygT4ICY1EMsX1zl6cpR72ffEWU8ZPxVxWzrnG65w9W8ezy1Zw+pej1J35Df3aCZp6+jC8u+F1va2tFYCOjq68EYu5f4kmkrG8TEul8vcmoxEtlcJkNA5z0G63o6rqsPejfT+aPOdDNB4hqCaYNH0uX21ZiS/pos+gIFiK0JH4fPceMqIZxSLS097A4RN/8PySWiS7TRm0ROpbugzcN7p40LAVK/qO91dz02+hs9eLL55ikseBWTbx2urn+PbgT5T4G6iZOZ2sfxxZSUSKxxPYbPb+paRG/xfHHgRWL1vM+ZMX2Hu8mWgoxIGt6/CKBjZs20VbUyNvrFqEUL2UL4+dprxPoPFiK0IykSAYvNW/vlWVQoXHU05LRy+vrnyRRXOfoLvIxfotu2mq/5P5s6s519iOzaLw9DSZqGxnzoyJCPF4JL8BDMypQoOvN0A4koJwF97OaxRJEgFfd38SdHrp9oUoLy3hmyNt1Hpg9iQnUoW7gi6vD1GUR0zqQsHVbj+GTAyj1ku7P8OVlhbefGUFlzv9VI1zsvSF5eza9SmlLgWpahYNfzUg5ArkSDWnkNDc3MINX4RzV25iFGBxzWwqyxWWL5yKQ0ixcdNGjLrORx+sp0RP0VzfhFBZVcnDAKtZwl1ShNcX4dq166x9bxsRNcrPh37g/JlTvL12Ga4KDwcPH0HMenl5dTVSOBQcVlcKES5HMVdvdPPkzCm0Xu7gQksbF5ovoWNgxZIadnx2kJpF81k4y0Nx1UQeaz99Z1k6HK6CnjmzScbjstF2pQPJaMLuLEPLZFEjMQ4cOc3kp+awakElPREre/d8z6Z97Ui53TIcVgedRgoNBoMBi9lEpdtJQkuRTmeZ6ClFEAwktDTHfv2dH4+fpFgpwm63MrdmKtLj02bQ5fWRzaYLuhT0BwiyLCLLFnRdB/oPUzZFx2lX8If8VE8ejyyJ1NbOG5xzhVwKRprJgfcmo0Sx1YLZJAMQUYP9OSeK8rCD8cOInP+iKBOOxBCcpc58//QwzdxIMBmN+SbAWepEyPVzhV7Ex4p8PxmOIvAIQ8j1c48SRFHGblOQAv5AvrW3mK1s37xOD/gDJLUUfVkNo9lMeZl7TOTPQDJnrITRUAKovMzNvdrfv/9QnqoI+AMY1q55SQdwu8uIRaNEYwmAYfzG3Qgdu7WfFRtICt2LTu6kdC/2bQ4HVkWhp6cXAKmkpIhQKE6ORxlNeeDAAx3I7bRqLJp3dmhy/xed0YIay1jqbULK4XBRUlKElEnrnK+rG1bEc6TN0GuOjkhpGULh4CCdoaTSvejcj/07te4qzy15hn8B0nEpIgoaSy8AAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/slayer_collapsed_RS3.data.png": +/*!***************************************************!*\ + !*** ./images/data/slayer_collapsed_RS3.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAADcAAAAZCAYAAACVfbYAAAAYyG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgO3bMAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAGeklEQVRYw9WYXWwcVxXHf3PnzsfOfnhjr22SNMjOR1OC6gRIS2gJX6ooRS7qAwIET0gRL6gSj+UBoZaKB4RQhVQRRKmQqBACVPEApUiABDSQNECCE7upiI1J7Nhexx+7O7s7H3dmeJid8W4lJHhbjrS6c/fee2bOOX/dc85f+8TnvpBsb64jdB0AXZdkEkWKfomjCMO0AAgDP3/un2djFCmSJEZKEwClApI4GdjTPwIDurN5v54oUsRxTBxFdNsuge+hCQ2h6WzV15iaPsx3n3+Orz3zLJ2lPyJvvrnAyvIiQgiErqPCkDiOGNk3hu95qDBAGiZxHCFE6oDA9wCQhoFpWXidDkqFmJaNEDoqDACwHQcV7jko8L38PZmzUj1mviYNc+CdAAWnSLvV7BkWEnQ7jI5VuXd6CrtQ4drCHO898xBff+47vPqzl7ALBludEAlgWjaB72E7Tv5xjZ0tSpWR1OthgND1/AOcUgm32UAIm47rEscRdqGI121jF4q5MV6nM+AYp1Qi8P3cSSoM873SMAh8jziOMS0by7Zpt5pIw6TV2IUkQQU+J45N842vnuPowWPY4xNcuvYvLl68zIc/NsuF377K5T+/RrL8Oy7fCpBSpjAUQqBChWXb+c/3PHRd5nMAFUVEYcjbD99L23UH1qQhsewiuq6helGJegZYto2KIky7gIZA17UBfQCVkSpx35nR8Ql8z8MwTUKvw8mZ+3np6Vnq3ghrOx2EV2eyWmb99jI/fPEFSgWdsLnGy39pcXD6KNqJ0+9P1ldvEUcRxXKF1cU3NIZQTKuQXH7lm3jNAiub29Q7AdP792EbFgiNH7/8K8aCOaYO3Mcvfn+F1+/KFJYZTLIIDKN85vGP8Pof/sYPfjOPu7vLT5/5Imu6xpeePc+N69f4/BNnEUce5YVfX2Ai0fEbdxHZ4X78D6McODDBwq1NPvv4Rzl7+p3ccWo8+fT3uH7lr5yZOcKla4tUCiUeOm7gGiOcPX0cIaUk8D1Myx5q4zY2t2m2AmiusrayjCMl2/U7AKyurHGnvsvEWJUfvXKDB/fDzPQoUimFadn5tTussrSyhR63Mf1NFrcUNxcWOPfpWf6xssWhA6M8+shjnD//bcZqJeSh+5m7OrcHSyF0fM8bWuPmFt7gdr3FpZvrmAI+eGqGeyZKPPbwMfaJgKe+/BRmkvCtrzxJNQmYv3Id7V0PP5LcXl4k8D1qk29jaf7KcN6WTil54MRhlv65TJQITr7jCB//wLu5eulPuN0On/rkLBcX6rSbG9xXS6i762kq2L67kee4YU0FlbHJJA4DzsxMcePmbbp+FxJBgsbsh06x9PdFTp09wwNHTcqHpogXL6SwVKHKS6phFadUBl3y2tUlNMOiXB2nG0bsNFx+8ssLHH7PSZ543z1stIq8+P2fc+75+RSWi2/OY1o2lWp1aGFZOzidZAV46PsITUMTAmkYtFtNiGMKtkEQKGJNMH3sRBq5OI7yYndYJa07I6Q0MUwLyykSJwlCN6jWJrCKJcq1/chCEWmY2E4R6fseUhppRxANdzpQYUh5pJgbaxeKaWC6AaCh6TIt1EWE73sIy7IRuo4Qel6wDqOk7VVazHvdNtIwcrRJw8yLdCF0hK5jWTbC9z2ESNuZYa4tAz/tLVUYYBeKeT28l6cFlm332jI9jRz/J5JCMO6DaNrQmlbavfev5QYXSxUC36M8Uh3qCiVrqnPKo2dMlsakYeB7qR2B71EsVdLImZZNt9NGN4zhvy0NE2nIvHPPpOAU0Q2DbqedO0G23eaeAq/L8VMPJmHvYumnDvpHo+cEvUf+RCogDENK5Qpuq5mfjVSALs18PaMg3jrPdIZhmI+Zjv79hmGgSxOv22a0Npnrz843dndyW9puE2lZdo7fwPfZuLNKHMcIIXI+o7m72+NBdvO9e/CIiKMI23Gor61iF4qoMCCO4wHOJPsv42tMy2Z3eyvvI/s7E9OyCHyfwF/No2BaFm6zkRu8vVnHdhw6rptzLv3vym9LpfZSQJoWxAD7lHUNGSxSjEviOMpJnX6WK/tYt9kYgI5TKqHCALPn0DiKeoyZyK/1OIrwOp2ByAV+yuUIoadcTG+vChXlkSoAjZ2tvctGhfi+h6yNj/9v+UZKlFJkxJJS6r8+858kUgFOsUKn4w7wpm/VMTY+iVKKkX1jWJad86puq8HE/oOD5dr4OP8GnWaF+iWIoRwAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./images/data/slayer_expanded_OSL.data.png": +/*!**************************************************!*\ + !*** ./images/data/slayer_expanded_OSL.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAafG5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejEs8AAABhW5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKojDQ0AAA0Ybm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD51ntaAAAABm5vUEUAAAAAAADsa7vYAAAACW5vUEUAAAAAAAAAAAChinLVAAAAB25vUEUAAAAAAAAAWube0AAACUVJREFUeNrtnX2MHHUZxz87O/t2u7dzu/fe7im0tKUIpWptKoggGilSEpqYGDDGEkn8oyFBMREMakDA/9SICUUMwSjEBEM0CEJEYsAKbZVCX0/oQWnveu3dbXdn9n12Z8c/tjO3x93VXgt7s+X5JJe7m5vfPL995tnZZ57fM9/zfW/rzTaniHdGATByBVJDKYxsBiNXAKBWr1Kr2kRjMQAqlQJmuYziDxEOBUl2J9GNPABaPEaxWKJcKlEs5hjoH3CP+dZ/D7q/xzuj/3d7K+fwYdoSv56ZrXiXxvETaXL5IorPR6VSoVIxOfTOEboGV/DwQz/nJ/fdT/GdV/A9+KOt9o6du0gkeqibZfRCHr8/gGVV0aIxlGCYTGaKM+VMxzr7zbe9lXNoha2F7vtR9GulUiWdyTM6niYYibLsYx8n3BFn7/49rFu/gQd/8TDP//H3vPnmbsZ2vYDqvKMMQ3dfdDyuTQdyuTKvsbkC3jmGXshDIT/v2Hhcm/PFONtbOYdW2BK/zm+rq6ubvGEwfHSMZPcSnvj1d7ho6QrCvX3s2Pser722iy9s3MT2vz/Prlf/iX34JfadqOP7/h3ftIeHDwJw5MiYe8BIuJFClMqF6XeGabo/h4JBKqZJKBicNRlN09B1fdbf59t/vu2tnEOrbIlfZ9sqlSsUSjUuvHgdv7v3RibKPdR9MZRIBzYqjzz6GDV/mFjEz4mRPTzz0r/54jXrUbV4bMZHze4DYz7OmTEWn7Hz0Nb569d4Z8x+6J7NHE9HGJ0cZ6JocuFggnAgxDc2X8sfnv4rXek9rL3kYqz0EizVj1oslojHtcbHgZ73iIOEjxqbN17Nzpdf5/EX95PPZnnqvq2M+33ccf82hvft5dabrkJZfh2/eWE7fXWFvW8eRCmXSmQyU43cRNfFi8KiMDjYx4Ejk9xy45e5at0nONbRw+33Psq+3f9hw5rl7Ng7QjwS44pVAfIBjctXX4BSLObcJLw5FxGEVjIxeRIjZ4IxxvjoYTpUlZMTxxqJyug4xyay9HV38eRzw6wfhDUXJlEH+gcYG5/A7w/MmXALQit491gaX61AsDLJSLrGoQMHuO1rm3h7NM3QkiTXfel6tm37Jd09MdShy9jzxh4Up3g8V21QEFrF/v0HODqRY8eh4wQVuHrtGlJ9Ma6/cgUJxeSuu+8iaNv87Ie302Wb7N+9DyU1lBLPCYtONKzS39XB+ESOw4ffY8sP7ien5/nbn//Czldf4btbNtIzMMjTzzyH3xrnq5uXoxrZjHsApyYnCK2mJ9HJu0ePceklF3Hw7SO8fmCY1/e/hY2PTdes5aFfPc3aqzZw5WWDdA5dwMdGtk+nDYlEj3hQWDTCoQCDPXGGDx1BDYbQkr1UahZ6rsBTz21n2acv56bPpjiRi/L4Y3/i7idGUJ1qg2HoM1ZBBKGV+Hw+IuEQqf4kpYpJtWpxwWA3iuKjVKnywj/+xbMvvkxnrANNi7Ju7QrUlatWMzY+gWVVpVQmLHIAQyDgJxCIYNs20FjsjcdsklqMdDbN8mVLCah+1q//zMycV0plgpeuxM0/h4IqndEI4VAAgJyeaeS8fn9jg1x5BS/jxKffH8DIFVCS3Um391KuvIKXCQWDbhNZsjuJ4vTzyiKF0A64PcVGHkXcIbQritPPKwjtgt8fQIvHUJr7eTVNE88InsWJz3hco1gsTffzAtLPK3gaJz4zmSnKpdJ0P29zKUIQWk3NsqhZ1mn3aY7PYjGH4mgKOKUIQVgsVL//tH9vjs+B/oGZixSC4NXAff8Nm5ErNPp5pcYrtBOWVSU1lEIxshm0aEN6R/p5BS/jxKcWjWFkT/U2KMGw9PMKbUEi0YMSDDfShnhn1C2VST+v4GWc+Mxkpoh3RqefpKibZfGO4HmcOHVv2OCUeJogeBwnTt0bNqf8IAhex4lTI5tBdeq8Trns27fcYIuLBC+y84033N5zI1dATQ2leHtkxN3hkSefFS8JnuSTlywFpuu8qlPn1Qt5p47mEzcJXiQSjtrQVOdVgyHyp1SrpVQmeBknPvPlCmowJPq8QvugaZq7mDajn1f0eQWvo+s6dbM8u59X9HkFr1MxTbfOO6OfVx59F7yO8+g7NPXzOuUHQfA6TpzOWB4WhHZixvIwSD+v4G2a49Pt5wXR5xXaAydOjVxhutog+ryC1ymVCxiGPl1tWLlqtZsIS6lM8DIV03Rv2FauWj0z55VSmeBlmuPTzXlFn1dolysviD6v0KZXXtHnFdoW0ecVzgtEn1doO0SfV2g7RJ9XaFtEn1doW0SfV2hbRJ9XOC9u2ESfV2hLRJ9XaDtEn1doa0SfV2hLRJ9XaGtEn1doW0SfV2hbTqvPe8WnVtqwsP+LtVAU3xzH9tcb361Go1vdtlrqFGdO52rXqtfJGgUyWZ2f3nYxd247yGBfEi0WoW7bZ+3XD2p+p6P5P1B68fznCsYMfd5ZdV7V7/9QJz7/WVcWPXDndewZYts2pbLJ8Umde7YMsaavxNc/l+L4ZJZSpYpt24s6vzOhHc6/Z+u8rQ7cD5Jq1WIqk2PDpVE2XV7FzE6xaVWAZb0h0tkcNasun/vncP5n1Xm9oM9bty33q13fPHXbJl8sU62WeODWXqySTr1mUs6kuXPjUoqFIqWySd22PfvmXpQr7gLO//v1ed1+3kSip2X9vM2T9FLAntNcbBuzVuPH37qI3kQEtbOXcM8Swolu+pMdbL1hBdWqBWcRvB/I/Dx6dV3Ia3L0eZ1+XtXp59WiMXRdpzMa/0imB+c6H5/PRzQS4oHfjnL3wxWsphTB71eIdYToSXTi8/nOC38thr8dfV69kKcnqaFCY8ktk5kiEo6y8fprOZk+SbliUrcqBMNh+nr7cR7U1OIxisUS5VKJYjHHQP8ARq5AaiiFkc3gLHoku5MLHlOrV+nr7Rf7Yn9O+6+8/Cp6Ie+2Mvi23PwVG6C/v5dCPk++UAJwl4yb62tzdZ85252bPiUYdseezRhnYmJf7L9/zJLBAaKxGCdOTDZy9K6uDrLZIsPDB+ctCltWdcYkmg04dTe9kHcn01zSWOiY+Zwm9sX+0dGj7rG6ujpQa1Wbnbt2ATM71SumSSgYnPW9kXvkMSs1skZmxhinlOHcFZ7NGLEv9k9nv/Eo0Ltce83n+R+bCm28wSXdjwAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./images/data/slayer_expanded_RS3.data.png": +/*!**************************************************!*\ + !*** ./images/data/slayer_expanded_RS3.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports=(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js").ImageDetect).imageDataFromBase64("iVBORw0KGgoAAAANSUhEUgAAAK8AAABLCAYAAAAGR9fhAAAehm5vUEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYX5ysAAAGFbm9QRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqiMNDQAADRhub1BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnWe1oAAAAGbm9QRQAAAAAAAOxru9gAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAAHbm9QRQAAAAAAAABa5t7QAAAQyklEQVR42u1da4wlx1X+uh7dfR9zZ2Zndvbh127sTWxjr53YRCaOQyxZBIMTBQmIBD8QIfIPIBL/CD9AJARZAgmiSBGOAhFIEUIyivIDQkA8xGPBD4Gdtb12FK8fa++ud2ZnZ+6de/t2V1dV86P61O17vSYOhJm7q/qk0b1zu7u66pzTp0+dOnVO9LGff7i6tPEmGOcAAM4FCMZoNGGNgYwTAECpCv+9+T99GqNRVRZCxAAArRUqW02d0/wEMNU2/d9sh/rDuYAxGtYYMM79/9T3UhVgnE8db44nabVQjMd+THROsz9Ej+a46R7N/jXHS32j62fbbLb9P91vltazNKZ+NMdM47vS+WetxXi0g1IpqCJHxCKwiOPSxgXccOQIvvylL+B3Pvd5ZC//K8RL3zmFN149DcYYGOfQZQlrDRaXV1DkOXSpIGQMaw0YcwRWRQ4AEFIiThLkWQatS8RJCsY4dKkAAGm7DV1OCKiK3N+HiOnaif0xIeOpewJAq93BaGcAAFNM1mUJISWsMRAybvyuwDhHnCRQReH7ZK1FnKT+vHw8AmPc/0ZjnO3/7HnUfrP/SZpip7891R9qR8gYQgqoopjqN2Pc07JJf6JrNhxell6M86lrm/xSRX7F8s8ag1LlyEc7WFldxrvfdRRpuoBnT53E++/5AB75wh/hW3/5NaQtic2shACAOEmhihxpu+0739/aRLe3OMUs6mC728Vw0AdjKbLhENYapK0O8vEIaaszEY4smyJcu9v1wkSdJwgpa8I7AUvSFKOdAYSMsdPfvixhSACoj0RwascJBffXCCmQZ5lnPjHLWuMZQczw2soaCCHRWehhtDPwxGeMTwmptQZxkvp7NYXS9U83hJZBFXl9f+bPT9ttp40YhyoK/7CoIoeQcqpda8zUwzThV3pF8k/lY6g8w203H8Pv/dYv4aZrjiHdv4Ynnn0Njz/+FO7/8Ydw4h++haf+499QvfqPeOqMQnT8ng9X515/zTeapI4gSZqiyHPfOfpdGwNTllhcXsFoOIQuC38sGw2RpB1wHkHXwmDqASZp6n+LwMB5NNUeAEgpYWeuoT7Q9yRNYUwFzqO3HBMygS6LqVcl9a15rjEVKlgIzt/SBpfS338WXEp/jZCJHwO1z6X0Y6b70rFmP5rjarY5e02Tbs02tTEQ9UM02//muK8U/kkpsX1xHbfffhxf++xPYj1fhY26YK02Kgh8+StfheYpui2OC6dP4ut/9ySuOXoTolvv/mD15tkzsMags9DD2dMvRAgI2EV0llYrnWd48q9/H/mghTc2LmE9Uzh6aBmpTAAW4S++/jdYUSdx5PDN+Kt/fhpPXhTObCDV3XzyAwJ2CyyK8ImH7seT//Jf+NO/fx7D7W089rlfwXke4dc+/yhefO5Z/OLH7wO78SP44789gbWKo+hfBGsazwEBewFrLQ4dXsOpMxv4uY/+GO67+4dwrr2KT3/2K3ju6f/EPcdvxBPPnkav1cUH3iMxlIu47+73gAkh/OQhIGAvoEuF9Y1LGOwoYHAW5994FW0hcGn9HADg7BvncW59G2srS/jzb76I9x8Cjh/dB6G1Rpyk3q0RELDrZgMXePnsJrgZIS42cHpT46VTp/CpTzyE776xiesO78NHHngQjz76RaysdiGuux0nnzk5MRsY41Oz04CA3ULSauOZk8/h9fUdPPHSm4gZ8KN3Hse1a108eO8xLDOFz/zGZxBXFf7gNz+NpUrh+aefQ/Teex+oXn/1NFSRY/XAQbz8/NPB2xCwq1g+cG2VDQe465Yb8Morr8FUDHfcciN+4kPvwzNP/DuG4ww/+9MP4fFT6xgNLuDm1Qrrwzedq+zSxQvQpUaSpsFVFrDr2Hfo+spoDVOMcc/xo3jxpTMYF2OgYqgQ4aEP34mXv30ad953D374phgL1x2BPX3CmQ261H7lJiBg170NxkDKGDLt4MS3XwZEjIXl/RiXBlv9IR775gm866478PEfuRYXdjr46p98A5/60vPObDj9necRJyl6S0vBbAjYdXT3rVVCuNVJRABnzAXmqKJehteIqgpJzKGUho0Yjh671S1SWGt8bEBAwK4Lb28ReZbBWot2t4tsOEScthCnbVhr0On1sLO1hYXFRfS3LsEag7TdASuKHEJIF9FkgrssYPdBgssYQ55ltevWQhU5Wu0O+pubEDJGxEUdYBWjKHKwJEl9lJUJq2wBewCK4nPRZhZCCh/lV+QuxFMVOUxZgjEOxjmSJHWal2JDQ2xDwF6BQkddWKlG2m4jTlLk4xHiJIWQEkma1mGd3GneQLaAufA4WAtrjQu9LFUdSyyQtjqIk+TyAt/p9qCKHAuLS2GFLWBPQMH2uiwxzkYuaF2XGA760KWCLjXiJEGROzlVRY5Ot+c0b5ykGGcjH0wdELDbaLU7botRvbPFady03oqkMBz0waXEOBv5IDJW5Fltc3B0u71AxYBdR7vbRX9rE1o7h0EzPFcVBbQukbY66HZ7Pva8yDOneYUUsNZgNBwGSgbsOrLh0Alnb9FvIE1St7+Q/lSRY1TvtxPS7ZBmWut6lyp/y/6vgIDd8jRMbNvUm7GqcLufFxaX6oU0t+KWDYfQWrtgdFHbusFVFrAnwss59u1fg5DC7XRmk+3xQsbob20ibXW8fAopIYRwmndiRwRvQ8BeaF6O9fNnfdIR+o1SMszKJ2PcaV4AYRdFwJ6CBHS0M/C5L/LxyGvapdX9UzJK35kQoqGik0DJgD2xeRljPp4BcME6O/1txEmKYX+7TvAykU9vNjgnsZhKohEQsJvQukS72wUAdBZ6yLOsVqguzsFaC86jOm1WDq01RJKkEEJClzrYvAF7Amtt7SZzKa5GOwO/XJwNh1g9cBBFnte51zSEkI3AHO5WNcIKW8BeYPXAQQwHfR8c1lnoedPBWoNsNPQrwNa6zJKTkMh6NhdCIgP2Auvnz4IxjsXlFez0t70FkGcZFpdXXLxvIycaY42QSIqXXFxeCZQM2IMJG0er20F/a3M63SznGGcjf97i8opfgSuK3Nm8tASXj0e4/2d+oQrkDJhHvHbqpJfVJEkhjNHQpUKcuBSU//TYnwUqBcwlrrnxFu8HNkbTBkwLXSpyCgd/WcC8oqIM9wAoqizENgTMP5qxDV54ZeI2wBkTzN2A+QXJJ8kr41ygyMZ+BSMgYF7BeQRrLYpsDM4pM/pMGaWAgHlFsxqRKIrcrx2H5eGAeYbL4eAma0WRT6LKRFgaDrgCQHIqhHA2L0lzQMCVADc/E5MiggEBV4bNyxEntc1LVRVpx2ZAwDyDSukKGTs/78LiEnx+1ICAebZ5hcTC4pLTwqPhwKfYCQiY/wlbjHE2wmg4mFTATNI0mA0Bc43ZOtIsqWuwNeMmAwLmFeNs5OZnPhi9TuQbMqMHzDNIPq0xk/y8QsZua3FYJg6YZ3uX83oLfDwxG3SpIGQcosoC5hrGVC53b6mmdw8DCIn2AubbbKjlc2r3MGUpCd6GgCvB26CK3GleIWPvKgtRZQHzjCLPfd5eIWMw2nw5zkZB8wbMvealtP66VM7mBTCVEzUgYF7h050WOdjyyn6faC8gYN5BifaWV/aDbW1uuGJtWRYWKQLm29tgjC/vurW5MV1EMCxSBMy11p2RT+8qY5xDxiG5dMD8QsYJGOcTVxkw2UkxHPQDhQLmFiSfkyKC9S6K4G0IuFK8DZQlkgGu4mCI5w2Yd5CMUoVMIYTwGSKN0YFCAXOLbDT0hQaFEBBauxSnANBbWsK+Q9dXuix9FW6yLyjybPbTWgNrXCLg5vnevVGfR/ETQkof1kb3pe9pu42sUUKWMQYhY+TjEdJWZ+qeVNKTMqioIvf78CjQiJKp0IqMtdZXnZlKYsy4b5tA40rbbQwHfX9/ay3a3S5UUfjrqD1V5JBxDDXOwO0If/jLt+JXv/gCWNKBiBMkaQpVFFBF7u8fJ4lvn+hFdIgTp2lGOwMwzr1p16Q5vTmJX7OfVxP/2p0uLm2su35pTTspbKOzpa++zRjzCxjUQapfQWlRnQ1ivSHtynC6Qc0G/EwExvq2mgIzHPRhrZkY5A3XiKsAMyk74HaRskksspC+LWuM96D4jIKcT85v1PQiG4oYRHWY3Y5qC11Ov43iJPX1EwjtbtflOI4TqHyMPBvidx8+gjvXcnzy/uugxiNoVSCvd6uQoKoiB+fCx5YQ3XSp/SbD/tYmOgu9xoNiPFMvx6+rmX8TxWLf6m2gJ6uz0JvSRKoofJp1Ve+8iJPUMzxu1LUgQjS1CwX8EDGoZJEuS88QChCiJ5TOaTI7rrcskdDRgBxDrNcC1JbfIdIoCWqt8fdQRV7Xty29pnCvpaQmpoQqcqStTi0EcW1rySlGqqJoMLXAA3f18NE7Sqjti/jYzRK3XduC1SUQRVPaXgiJIs99bImQMToLPQgpUOQ58vHIn0PC4rRq7AV1ll9XO/8u621oSj11tvkUxUkCXZbo9haxb/9a45UhJ3XcJPdEiZMUXHL/lLrfZd2ORtpuQ0iJtN32WoUG54hceKFykUQMcZL4AQkp/XUkeE0CUz9o0MR8uiZtt32R5rjh6yZtSP1qggo5U7tCCn+tNa6wc0eUeOSTazDjPqxWyLc28esPXgtR5bDawGpdC53wGoiYSYJC2p6ip5pvRVFXxKHX6Sy/rmb+kXCTt4Efefdtv33h3BkwzhFFDEU+RlXZ+uktUaraRtIlrLWQcYz+1iVUVYWIRYiTBFHkXk9RvWCnSwWtS2hV21ARYLRG0mp5xtArpKpch1sdp92i+pVX5GNXTG6cwVqDqqqgigKtTgelUjDGIGIRuJAolUKr04G1FhGLYLT2gmiMhowTf7+mieBeSy7dFRcCUcRAZQ50WYJxDi5cMWcZJ+67LlFVFoxz5OMMxmhXM7eqAGvwyMM34H3HWoiEhLI9qLKNxaUuDqz28NQrY2hd1m06eu4/eBg7/W0krdRXgKwqV4OMFo2IPlVV+euElIgi5vtD/DLGXLX840KgVG7OcPi6o4huvfuD1bkzr0DIGL2lJayfPztlf9CEhJ46VRT+6WlOfCiTCT1B9IQ0Jw8A0Op2MBoM0O0tuuuyzL8ynO1IFTmlnzARwehV1pxE0NOuy9JPpCbnld6uot9oktCcCDQnGqsHDmL9/FlvKsxO8OgBoLa9PR0xKJVDFzlKVaCqLKIoQlVVEEKCcQFEEZZWDzTMDOPNkuab4XL3ITqQdiX60kSH+EWmxtXIv9UDBzHY3oYuFQ5fXwvv+vmz9SsmweLSMsq6o2mr42eKzU9ZG9Fc1BnVtUJZlugu9DDcGfhrjVbgIvbHyfaZ/Z/aLMvSfzZtJTpfSgkuJrNXar95vV9KrM9t3sto5Y/P9n22L7PX0j2b51A7szRqTkqIJtRm81jzGurbLA3oPm/Hk1l6UZ+vRv5dunjBe3nWDl2D6L33PlC98t0Xptwmu+FSaj5xs8Y8aYgfpEuJNEhTszU1a3O23dRa79SF1NRYe+kCnP28GvmnS4Wjx25xE7amC2NXXEpE9HrW62bOyjOGiib/IFxKbvKRNGbnwruD4iRF2m77CUTTDdSceVN/aSwTn6fwx2nG/L1cSDSh+f9yAV7N/POKQ5coihzRhx78qerixsY7XuUQQriK23VSaq31O77m7WC0QrvTQ5YNwbl42zaa90uS1K8IDnf6U69rAH4i9f3ie/X1/3rt90u//+04rnb+re7fj/8GO6Pn3eR9G3UAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./extraFeatures.ts": +/*!**************************!*\ + !*** ./extraFeatures.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _modules_slayer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/slayer */ "./modules/slayer.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + +/* Extra Features for advanced controls in the app + The following functions adds some extra functionality to the app + - Ability to Ctrl+V to paste and image into the app + - Ability to drag and drop and image into the app + These functions can be used inside of alt1 but are not useful (mostly for other browsers) +*/ +// Listen for pasted (ctrl-v) images, usually used in the browser version of an app +alt1__WEBPACK_IMPORTED_MODULE_1__.PasteInput.listen(function (img) { + // Display the image at the bottom of the document + if (false) { var pixels; } + // Look and see if we can read a slayer task + _modules_slayer__WEBPACK_IMPORTED_MODULE_0__.findTask(img); +}, function (err, errid) { + console.error("${errid}: ${err}"); +}); +// Handle events for when a file gets dragged or dropped onto the app +document.addEventListener('dragover', handleDragOverFiles, false); +document.addEventListener('drop', handleFileDropped, false); +// Convert Blob(file) into Image Data so we can use it with alt1 +var blobToImageData = function (blob) { + return __awaiter(this, void 0, void 0, function () { + var blobUrl, img_1, _a, w, h, aspectRatio, canvas, ctx; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + blobUrl = URL.createObjectURL(blob); + return [4 /*yield*/, new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { return resolve(img); }; + img.onerror = function (err) { return reject(err); }; + img.src = blobUrl; + })]; + case 1: + img_1 = _b.sent(); + URL.revokeObjectURL(blobUrl); + _a = [img_1.width, img_1.height], w = _a[0], h = _a[1]; + aspectRatio = w / h; + canvas = document.createElement("canvas"); + canvas.width = w; + canvas.height = h; + ctx = canvas.getContext("2d"); + ctx.drawImage(img_1, 0, 0); + return [2 /*return*/, ctx.getImageData(0, 0, w, h)]; + } + }); + }); +}; +// Handle when a file is dropped onto the app and have it load assignment from the file if it can +function handleFileDropped(evt) { + return __awaiter(this, void 0, void 0, function () { + var files, fileReader, output, i, f, imgData, img; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + evt.stopPropagation(); + evt.preventDefault(); + files = evt.dataTransfer.files; + // Only accept 1 file at a time + if (files.length > 1) { + console.error("We can only process 1 file at a time. Please only drag and drop 1 file at a time!"); + return [2 /*return*/]; + } + fileReader = new FileReader(); + output = []; + i = 0, f = void 0; + _a.label = 1; + case 1: + if (!(f = files[i])) return [3 /*break*/, 4]; + // Skip any files that aren't a supported image type + if (!f.type.match('image/png')) + return [3 /*break*/, 3]; + // Convert the file into a image we can process + fileReader.readAsDataURL(f); + return [4 /*yield*/, blobToImageData(f)]; + case 2: + imgData = _a.sent(); + img = new alt1__WEBPACK_IMPORTED_MODULE_1__.ImgRefData(imgData, 0, 0); + // Look and see if we can read a slayer task + _modules_slayer__WEBPACK_IMPORTED_MODULE_0__.findTask(img); + _a.label = 3; + case 3: + i++; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + }); +} +// Handle when a file is dragged onto the app and show user we will only make a copy of it (must exist or it won't work sadly) +function handleDragOverFiles(evt) { + evt.stopPropagation(); + evt.preventDefault(); + evt.dataTransfer.dropEffect = 'copy'; +} + + +/***/ }), + +/***/ "./modules/SearchAlgorithm.ts": +/*!************************************!*\ + !*** ./modules/SearchAlgorithm.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SearchAlgorithm: () => (/* binding */ SearchAlgorithm), +/* harmony export */ SearchData: () => (/* binding */ SearchData) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var SearchData = /** @class */ (function () { + function SearchData() { + this.reaper = false; + this.task = 'Dragons'; + this.probability = 0; + } + return SearchData; +}()); + +var SearchAlgorithm = /** @class */ (function () { + function SearchAlgorithm() { + } + // Lookup best possible assignment based on input string + SearchAlgorithm.prototype.lookup = function (lookup_1) { + return __awaiter(this, arguments, void 0, function (lookup, skipReaper) { + var probabilities, res, _i, res_1, a, _a, _b, b, res2, _c, res2_1, a, _d, _e, b, _f, _g, b, key, aliasKeys, i, creatureKeys, i; + if (skipReaper === void 0) { skipReaper = false; } + return __generator(this, function (_h) { + switch (_h.label) { + case 0: + this.data = new SearchData(); + probabilities = new Object(); + if (!!skipReaper) return [3 /*break*/, 2]; + return [4 /*yield*/, fetch("./data/reapers.json").then(function (r) { return r.json(); })]; + case 1: + res = _h.sent(); + for (_i = 0, res_1 = res; _i < res_1.length; _i++) { // Search created by authors (overlord1234 & David) and redefined as needed + a = res_1[_i]; + probabilities[a["index"]] = new Object(); + probabilities[a["index"]].reaper = true; + probabilities[a["index"]].index = Math.round(this.similarity(a["index"], lookup) * 10000) / 100; + probabilities[a["index"]].creatures = new Object(); + for (_a = 0, _b = a["creatures"]; _a < _b.length; _a++) { + b = _b[_a]; + probabilities[a["index"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175; + } + } + _h.label = 2; + case 2: return [4 /*yield*/, fetch("./data/assignments.json").then(function (r) { return r.json(); })]; + case 3: + res2 = _h.sent(); + for (_c = 0, res2_1 = res2; _c < res2_1.length; _c++) { // Search created by authors (overlord1234 & David) and redefined as needed + a = res2_1[_c]; + probabilities[a["index"]] = new Object(); + probabilities[a["index"]].reaper = false; + probabilities[a["index"]].index = Math.round(this.similarity(a["index"], lookup) * 10000) / 125; + probabilities[a["index"]].alias = new Object(); + for (_d = 0, _e = a["alias"]; _d < _e.length; _d++) { + b = _e[_d]; + probabilities[a["index"]].alias[b] = Math.round(this.similarity(b, lookup) * 10000) / 150; + } + probabilities[a["index"]].creatures = new Object(); + for (_f = 0, _g = a["creatures"]; _f < _g.length; _f++) { + b = _g[_f]; + probabilities[a["index"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175; + } + } + // Find highest lickelyhood of the search (overlord1234 & David) and redefined as needed + for (key in probabilities) { + if (probabilities[key].index > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].index; + } + if (probabilities[key].alias) { + aliasKeys = Object.keys(probabilities[key].alias); + for (i = 0; i < aliasKeys.length; i++) { + if (probabilities[key].alias[aliasKeys[i]] > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].alias[aliasKeys[i]]; + } + } + } + if (probabilities[key].creatures) { + creatureKeys = Object.keys(probabilities[key].creatures); + for (i = 0; i < creatureKeys.length; i++) { + if (probabilities[key].creatures[creatureKeys[i]] > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].creatures[creatureKeys[i]]; + } + } + } + } + return [2 /*return*/, this.data]; + } + }); + }); + }; + // Check the similarity of 2 strings (Refer to authors overlord1234 & David) + SearchAlgorithm.prototype.similarity = function (s1, s2) { + var longer = s1, shorter = s2; + if (s1.length < s2.length) { + longer = s2; + shorter = s1; + } + var longerLength = longer.length; + if (longerLength === 0) + return 1.0; + return (longerLength - this.editDistance(longer, shorter)) / parseFloat('' + longerLength); + }; + // Used for checked the similarity of 2 strings (Refer to authors overlord1234 & David) + SearchAlgorithm.prototype.editDistance = function (s1, s2) { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + var costs = new Array(); + for (var i = 0; i <= s1.length; i++) { + var lastValue = i; + for (var j = 0; j <= s2.length; j++) { + if (i == 0) + costs[j] = j; + else if (j > 0) { + var newValue = costs[j - 1]; + if (s1.charAt(i - 1) != s2.charAt(j - 1)) + newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; + costs[j - 1] = lastValue; + lastValue = newValue; + } + } + if (i > 0) + costs[s2.length] = lastValue; + } + return costs[s2.length]; + }; + return SearchAlgorithm; +}()); + + + +/***/ }), + +/***/ "./modules/SlayerDialogReader.ts": +/*!***************************************!*\ + !*** ./modules/SlayerDialogReader.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SlayerData: () => (/* binding */ SlayerData), +/* harmony export */ SlayerDialogReader: () => (/* binding */ SlayerDialogReader) +/* harmony export */ }); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var alt1_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! alt1/dialog */ "../node_modules/alt1/dist/dialog/index.js"); +/* harmony import */ var alt1_dialog__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(alt1_dialog__WEBPACK_IMPORTED_MODULE_1__); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + +var SlayerData = /** @class */ (function () { + function SlayerData() { + this.selectYourOwn = false; + this.ticket = false; + this.reaper = false; + this.count = []; + this.task = []; + } + return SlayerData; +}()); + +var SlayerDialogReader = /** @class */ (function () { + function SlayerDialogReader() { + } + SlayerDialogReader.prototype.read = function (buffer) { + return __awaiter(this, void 0, void 0, function () { + var data, box, msg, countText, e, countText, e, i, a, msg, countText; + return __generator(this, function (_a) { + if (!buffer) + buffer = alt1__WEBPACK_IMPORTED_MODULE_0__.captureHoldFullRs(); + if (!this.dialogReader) + this.dialogReader = new (alt1_dialog__WEBPACK_IMPORTED_MODULE_1___default())(); + this.data = new SlayerData(); + data = this.dialogReader.find(buffer); + if (!data) + return [2 /*return*/, null]; + box = this.dialogReader.read(buffer); + if (!box) + return [2 /*return*/, null]; + if (box.text && (!box.opts || box.opts.length != 2)) { + msg = box.text.toString(); + // Show support for 120 slayer assignment chooser + if (msg.toLowerCase().includes("select your own task")) + this.data.selectYourOwn = true; + // Get reaper assignment if it's a new reaper task dialog + if (msg.toLowerCase().includes("require you to collect")) { + this.data.reaper = true; + countText = msg.substring(msg.indexOf("collect ") + 8, msg.indexOf(" souls")); + this.data.count[0] = parseInt(countText); + this.data.task[0] = msg.substring(msg.indexOf("battle: ") + 8, msg.indexOf(". Can")); + } + // Get single slayer assignment if it's a new task dialog + if (msg.toLowerCase().includes("new task is to kill")) { + e = msg.substring(msg.indexOf("kill ") + 5, msg.length - 1); + countText = e.substring(0, e.includes(",") ? e.indexOf(",") : e.indexOf(" ")); + this.data.count[0] = parseInt(countText); + this.data.task[0] = e.substring((e.includes(",") ? e.indexOf(",") : e.indexOf(" ")) + 1); + } + // Get single slayer assignment from still need to kill dialog + if (msg.toLowerCase().includes("still need to kill")) { + e = msg.substring(msg.indexOf("kill ") + 5); + this.data.count[0] = parseInt(e.substring(0, e.indexOf(" "))); + this.data.task[0] = e.substring(e.indexOf(" ") + 1, e.includes(".") ? e.indexOf(".") : e.length - 1); + } + // Get single slayer assignment from still hunting dialog + if (msg.toLowerCase().includes("still hunting")) + this.data.task[0] = msg.substring(msg.indexOf("hunting ") + 8, msg.indexOf(";")); + } + // Look and see if there is a slayer assignment choice on screen via 2 options and title + if (box.opts && box.opts.length == 2 && (box.title && box.title.toLowerCase().includes("change your assigned slayer task"))) { + // Set ticket to true becuase we found 2 different assignments + this.data.ticket = true; + i = 0; + for (a in box.opts) { + msg = box.opts[a].text; + countText = msg.substring(0, msg.indexOf(' ')); + this.data.count[i] = parseInt(countText); + this.data.task[i++] = msg.substring(msg.indexOf(' ') + 1, msg.includes('(') ? msg.indexOf('(') - 1 : msg.length); + } + } + return [2 /*return*/, this.data]; + }); + }); + }; + return SlayerDialogReader; +}()); + + + +/***/ }), + +/***/ "./modules/UICounterReader.ts": +/*!************************************!*\ + !*** ./modules/UICounterReader.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ UICounterData: () => (/* binding */ UICounterData), +/* harmony export */ UICounterReader: () => (/* binding */ UICounterReader) +/* harmony export */ }); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var alt1_ocr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! alt1/ocr */ "../node_modules/alt1/dist/ocr/index.js"); +/* harmony import */ var alt1_ocr__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(alt1_ocr__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./modules/settings.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + +var imgs = alt1__WEBPACK_IMPORTED_MODULE_1__.webpackImages({ + slayer_expanded_RS3: __webpack_require__(/*! ../images/data/slayer_expanded_RS3.data.png */ "./images/data/slayer_expanded_RS3.data.png"), + slayer_expanded_OSL: __webpack_require__(/*! ../images/data/slayer_expanded_OSL.data.png */ "./images/data/slayer_expanded_OSL.data.png"), + reaper_expanded_RS3: __webpack_require__(/*! ../images/data/reaper_expanded_RS3.data.png */ "./images/data/reaper_expanded_RS3.data.png"), + reaper_expanded_OSL: __webpack_require__(/*! ../images/data/reaper_expanded_OSL.data.png */ "./images/data/reaper_expanded_OSL.data.png"), + slayer_collapsed_RS3: __webpack_require__(/*! ../images/data/slayer_collapsed_RS3.data.png */ "./images/data/slayer_collapsed_RS3.data.png"), + slayer_collapsed_OSL: __webpack_require__(/*! ../images/data/slayer_collapsed_OSL.data.png */ "./images/data/slayer_collapsed_OSL.data.png"), + reaper_collapsed_RS3: __webpack_require__(/*! ../images/data/reaper_collapsed_RS3.data.png */ "./images/data/reaper_collapsed_RS3.data.png"), + reaper_collapsed_OSL: __webpack_require__(/*! ../images/data/reaper_collapsed_OSL.data.png */ "./images/data/reaper_collapsed_OSL.data.png"), +}); +var UICounterData = /** @class */ (function () { + function UICounterData() { + } + return UICounterData; +}()); + +var UICounterReader = /** @class */ (function () { + function UICounterReader() { + this.countFont = null; + this.taskFont = null; + this.data = null; + } + UICounterReader.prototype.read = function (buffer) { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, width, height, _i, _c, match; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + if (!buffer) + buffer = alt1__WEBPACK_IMPORTED_MODULE_1__.captureHoldFullRs(); + if (!!this.countFont) return [3 /*break*/, 2]; + _a = this; + return [4 /*yield*/, fetch(__webpack_require__(/*! ../fonts/aa_10px_mono.fontmeta.json */ "./fonts/aa_10px_mono.fontmeta.json")).then(function (r) { return r.json(); })]; + case 1: + _a.countFont = _d.sent(); + _d.label = 2; + case 2: + if (!!this.taskFont) return [3 /*break*/, 4]; + _b = this; + return [4 /*yield*/, fetch(__webpack_require__(/*! ../fonts/aa_8px_mono.fontmeta.json */ "./fonts/aa_8px_mono.fontmeta.json")).then(function (r) { return r.json(); })]; + case 3: + _b.taskFont = _d.sent(); + _d.label = 4; + case 4: + // Reset data for next search + this.pos = []; + this.data = null; + // Look for all UI Elements until we find one, then the rest will get skipped + this.findUIElement(buffer, imgs.slayer_collapsed_OSL, { reaper: false, collapsed: true, OS: true }); + this.findUIElement(buffer, imgs.slayer_expanded_OSL, { reaper: false, collapsed: false, OS: true }); + this.findUIElement(buffer, imgs.slayer_collapsed_RS3, { reaper: false, collapsed: true, OS: false }); + this.findUIElement(buffer, imgs.slayer_expanded_RS3, { reaper: false, collapsed: false, OS: false }); + this.findUIElement(buffer, imgs.reaper_collapsed_OSL, { reaper: true, collapsed: true, OS: true }); + this.findUIElement(buffer, imgs.reaper_expanded_OSL, { reaper: true, collapsed: false, OS: true }); + this.findUIElement(buffer, imgs.reaper_collapsed_RS3, { reaper: true, collapsed: true, OS: false }); + this.findUIElement(buffer, imgs.reaper_expanded_RS3, { reaper: true, collapsed: false, OS: false }); + // If we don't find any data or we found too many matches then return + if (!this.data && this.pos.length == 0) + return [2 /*return*/, null]; + width = this.data.collapsed ? imgs.slayer_collapsed_OSL.width : imgs.slayer_expanded_OSL.width; + height = this.data.collapsed ? imgs.slayer_collapsed_OSL.height : imgs.slayer_expanded_OSL.height; + // Loop the results and return the data we find + for (_i = 0, _c = this.pos; _i < _c.length; _i++) { + match = _c[_i]; + // Overlay a rectangle around the matched area on screen if we're running in alt1 + if (window.alt1 && alt1.permissionOverlay && _settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.counter) + alt1.overLayRect(alt1__WEBPACK_IMPORTED_MODULE_1__.mixColor(255, 255, 255), match.x, match.y, width, height, _settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.counterTimer, 3); + // Get the pixel data for the matched area + this.data.img = buffer.toData(match.x, match.y, width, height); + // Extract the count and task (if avaliable) + this.data.count = parseInt(alt1_ocr__WEBPACK_IMPORTED_MODULE_2__.findReadLine(this.data.img, this.countFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], this.data.collapsed ? 10 : 72, 15, 30, 3).text); + if (!this.data.collapsed) + this.data.task = alt1_ocr__WEBPACK_IMPORTED_MODULE_2__.findReadLine(this.data.img, this.taskFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], 9, 28, 156, 3).text; + } + return [2 /*return*/, (!this.pos || this.pos.length == 0) ? null : this.data]; + } + }); + }); + }; + UICounterReader.prototype.findUIElement = function (buffer, img, mode) { + if (!this.data && this.pos.length == 0) + this.pos = buffer.findSubimage(img); + if (!this.data && this.pos.length > 0) + this.data = { reaper: mode.reaper, collapsed: mode.collapsed, OS: mode.OS, img: null, count: -1, task: null }; + }; + return UICounterReader; +}()); + + + +/***/ }), + +/***/ "./modules/data/assignments.ts": +/*!*************************************!*\ + !*** ./modules/data/assignments.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get), +/* harmony export */ getIndexList: () => (/* binding */ getIndexList) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Fetch a single assignment based on the index or alias +function get(assignment) { + return __awaiter(this, void 0, void 0, function () { + var res, _i, res_1, a, _a, _b, b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, fetch("./data/assignments.json").then(function (r) { return r.json(); })]; + case 1: + res = _c.sent(); + for (_i = 0, res_1 = res; _i < res_1.length; _i++) { + a = res_1[_i]; + if (a["index"].toLowerCase() === assignment.toLowerCase()) + return [2 /*return*/, a]; + for (_a = 0, _b = a["alias"]; _a < _b.length; _a++) { + b = _b[_a]; + if (b.toLowerCase() === assignment.toLowerCase()) + return [2 /*return*/, a]; + } + } + return [2 /*return*/, null]; + } + }); + }); +} +// Get an array of the index +function getIndexList() { + return __awaiter(this, void 0, void 0, function () { + var dataList, res, _i, res_2, a; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + dataList = ""; + return [4 /*yield*/, fetch("./data/assignments.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + for (_i = 0, res_2 = res; _i < res_2.length; _i++) { + a = res_2[_i]; + dataList += "\n\r"; + } + return [2 /*return*/, dataList]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/creatures.ts": +/*!***********************************!*\ + !*** ./modules/data/creatures.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get) +/* harmony export */ }); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + +// Fetch a single creature based on the name +function get(creature) { + return __awaiter(this, void 0, void 0, function () { + var res, _i, res_1, a; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetch("./data/creatures.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + for (_i = 0, res_1 = res; _i < res_1.length; _i++) { + a = res_1[_i]; + if (_extrafuncs__WEBPACK_IMPORTED_MODULE_0__.decodeHtml(a["name"].toLowerCase()) === creature.toLowerCase()) + return [2 /*return*/, a]; + } + return [2 /*return*/, null]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/masters.ts": +/*!*********************************!*\ + !*** ./modules/data/masters.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get) +/* harmony export */ }); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + +// Fetch a single master based on the name +function get(master) { + return __awaiter(this, void 0, void 0, function () { + var res, _i, res_1, a; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetch("./data/masters.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + for (_i = 0, res_1 = res; _i < res_1.length; _i++) { + a = res_1[_i]; + if (_extrafuncs__WEBPACK_IMPORTED_MODULE_0__.decodeHtml(a["name"].toLowerCase()) === master.toLowerCase()) + return [2 /*return*/, a]; + } + return [2 /*return*/, null]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/reapers.ts": +/*!*********************************!*\ + !*** ./modules/data/reapers.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get), +/* harmony export */ getIndexList: () => (/* binding */ getIndexList) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +// Fetch a single reaper based on the index or alias +function get(reaper) { + return __awaiter(this, void 0, void 0, function () { + var res, _i, res_1, a; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetch("./data/reapers.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + for (_i = 0, res_1 = res; _i < res_1.length; _i++) { + a = res_1[_i]; + if (a["index"].toLowerCase() === reaper.toLowerCase()) + return [2 /*return*/, a]; + } + return [2 /*return*/, null]; + } + }); + }); +} +// Get an array of the index +function getIndexList() { + return __awaiter(this, void 0, void 0, function () { + var dataList, res, _i, res_2, a; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + dataList = ""; + return [4 /*yield*/, fetch("./data/reapers.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + for (_i = 0, res_2 = res; _i < res_2.length; _i++) { + a = res_2[_i]; + dataList += "\n\r"; + } + return [2 /*return*/, dataList]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/data/variants.ts": +/*!**********************************!*\ + !*** ./modules/data/variants.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ get: () => (/* binding */ get) +/* harmony export */ }); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + +// Fetch a single master based on the name +function get(creature, variant) { + return __awaiter(this, void 0, void 0, function () { + var res, _i, res_1, a, _a, _b, b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, fetch("./data/creatures.json").then(function (r) { return r.json(); })]; + case 1: + res = _c.sent(); + for (_i = 0, res_1 = res; _i < res_1.length; _i++) { + a = res_1[_i]; + if (_extrafuncs__WEBPACK_IMPORTED_MODULE_0__.decodeHtml(a["name"].toLowerCase()) === creature.toLowerCase()) { + for (_a = 0, _b = a["variants"]; _a < _b.length; _a++) { + b = _b[_a]; + if (b["name"].toLowerCase() === variant.toLowerCase()) + return [2 /*return*/, b]; + } + } + } + return [2 /*return*/, null]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/dochandler.ts": +/*!*******************************!*\ + !*** ./modules/dochandler.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ animate: () => (/* reexport module object */ _dochandler_animate__WEBPACK_IMPORTED_MODULE_0__), +/* harmony export */ change: () => (/* reexport module object */ _dochandler_change__WEBPACK_IMPORTED_MODULE_1__), +/* harmony export */ getSide: () => (/* binding */ getSide), +/* harmony export */ hide: () => (/* reexport module object */ _dochandler_hide__WEBPACK_IMPORTED_MODULE_3__), +/* harmony export */ hover: () => (/* reexport module object */ _dochandler_hover__WEBPACK_IMPORTED_MODULE_4__), +/* harmony export */ main: () => (/* reexport module object */ _dochandler_main__WEBPACK_IMPORTED_MODULE_2__), +/* harmony export */ open: () => (/* reexport module object */ _dochandler_open__WEBPACK_IMPORTED_MODULE_6__), +/* harmony export */ show: () => (/* reexport module object */ _dochandler_show__WEBPACK_IMPORTED_MODULE_5__) +/* harmony export */ }); +/* harmony import */ var _dochandler_animate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dochandler/animate */ "./modules/dochandler/animate.ts"); +/* harmony import */ var _dochandler_change__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dochandler/change */ "./modules/dochandler/change.ts"); +/* harmony import */ var _dochandler_main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dochandler/main */ "./modules/dochandler/main.ts"); +/* harmony import */ var _dochandler_hide__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dochandler/hide */ "./modules/dochandler/hide.ts"); +/* harmony import */ var _dochandler_hover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dochandler/hover */ "./modules/dochandler/hover.ts"); +/* harmony import */ var _dochandler_show__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dochandler/show */ "./modules/dochandler/show.ts"); +/* harmony import */ var _dochandler_open__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dochandler/open */ "./modules/dochandler/open.ts"); + + + + + + + + +function getSide(i) { + var base = _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.get.elid("base"); + var side = _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.get.elc(i == 0 ? "left" : "right", base); + if (!side) + side = _dochandler_main__WEBPACK_IMPORTED_MODULE_2__.get.elc("single", base); + return side; +} + + +/***/ }), + +/***/ "./modules/dochandler/animate.ts": +/*!***************************************!*\ + !*** ./modules/dochandler/animate.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ loading: () => (/* binding */ loading), +/* harmony export */ loadingStop: () => (/* binding */ loadingStop) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); + +// Animate Loading Bar +function loading() { + var loadingBar = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("loading-bar"); + if (loadingBar) + loadingBar.style.visibility = "visible"; +} +// Animate Loading Bar +function loadingStop() { + var loadingBar = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("loading-bar"); + if (loadingBar) + loadingBar.style.visibility = "hidden"; +} + + +/***/ }), + +/***/ "./modules/dochandler/change.ts": +/*!**************************************!*\ + !*** ./modules/dochandler/change.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignment: () => (/* binding */ assignment), +/* harmony export */ creature: () => (/* binding */ creature), +/* harmony export */ reaper: () => (/* binding */ reaper), +/* harmony export */ variant: () => (/* binding */ variant) +/* harmony export */ }); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _extrafuncs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../extrafuncs */ "./modules/extrafuncs.ts"); +/* harmony import */ var _data_masters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/masters */ "./modules/data/masters.ts"); +/* harmony import */ var _data_reapers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/reapers */ "./modules/data/reapers.ts"); +/* harmony import */ var _data_assignments__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/assignments */ "./modules/data/assignments.ts"); +/* harmony import */ var _data_creatures__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/creatures */ "./modules/data/creatures.ts"); +/* harmony import */ var _data_variants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/variants */ "./modules/data/variants.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + + + + + +// TODO Clean up code and make things a lot better +// Update the Creature variant Shown +function variant(i_1) { + return __awaiter(this, arguments, void 0, function (i, creature, variant) { + var side, data, imageElement, imageContainerElement, newSize, weaknessElem, j, susceptibleElem, j, count; + if (creature === void 0) { creature = null; } + if (variant === void 0) { variant = null; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_1__.getSide(i); + if ((_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited || _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) && (!creature || !variant)) + return [2 /*return*/]; + if (!creature) + creature = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).value; + if (!variant) + variant = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("variants", side).value; + console.log("Change variant to: " + creature + "#" + variant); + return [4 /*yield*/, _data_variants__WEBPACK_IMPORTED_MODULE_7__.get(creature, variant)]; + case 1: + data = _a.sent(); + if (data) { + if (!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) { + // Set the image of variant but replace the # with url safe Percent-encoding + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("image-container", side).innerHTML = data["image"].replace("#", "%23"); + imageElement = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("image-container", side).firstElementChild; + imageContainerElement = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("image-container", side); + newSize = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.calculateAspectRatioFit(parseInt(imageElement.getAttribute("width")), parseInt(imageElement.getAttribute("height")), imageContainerElement.offsetWidth, imageContainerElement.offsetHeight); + imageElement.setAttribute("style", "max-width:" + newSize.width + "px; max-height:" + newSize.height + "px;"); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("level", side).innerHTML = data["level"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("slayer-level", side).innerHTML = data["slayer-level"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("lifepoints", side).innerHTML = data["lifepoints"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("defence", side).innerHTML = data["defence"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-melee", side).innerHTML = data["max-melee"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-ranged", side).innerHTML = data["max-ranged"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-magic", side).innerHTML = data["max-magic"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-necromancy", side).innerHTML = data["max-necromancy"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("max-spec", side).innerHTML = data["max-spec"]; + weaknessElem = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("weaknessBox", side); + weaknessElem.innerHTML = "

Weakness

"; + for (j = 0; j < data["weakness"].length; j++) + weaknessElem.innerHTML += data["weakness"][j]; + susceptibleElem = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("susceptibleBox", side); + susceptibleElem.innerHTML = "

Susceptible

"; + for (j = 0; j < data["susceptible"].length; j++) + susceptibleElem.innerHTML += data["susceptible"][j]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("combat-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(data["experience"].toFixed(2)); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("lifepoints-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(data["lifepoint-exp"].toFixed(2)); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(data["slayer-exp"].toFixed(2)); + } + count = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("kills", side).innerHTML; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("total-slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas((data["slayer-exp"] * count).toFixed(2)); + } + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + }); + }); +} +// Update the Creature Shown +function creature(i_1) { + return __awaiter(this, arguments, void 0, function (i, creature, variant) { + var side, data, _i, _a, a; + if (creature === void 0) { creature = null; } + if (variant === void 0) { variant = null; } + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_1__.getSide(i); + if ((_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited || _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) && !creature) + return [2 /*return*/]; + if (!creature) + creature = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).value; + console.log("Change Creature to: " + creature + (variant ? ("#" + variant) : '')); + return [4 /*yield*/, _data_creatures__WEBPACK_IMPORTED_MODULE_6__.get(creature)]; + case 1: + data = _b.sent(); + if (data) { + if (data["variants"] && !_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("variants", side).innerHTML = ""; + for (_i = 0, _a = data["variants"]; _i < _a.length; _i++) { + a = _a[_i]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("variants", side).innerHTML += ""; + } + if (!variant) + variant = data["variants"][0]["name"]; + } + _dochandler__WEBPACK_IMPORTED_MODULE_1__.change.variant(i, creature, variant); + } + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + }); + }); +} +// Update the reaper assignment data +function reaper(task, count) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, assignment(2, task, count)]; + }); + }); +} +// Update the entire Assignment data +function assignment(i, task, count) { + return __awaiter(this, void 0, void 0, function () { + var side, nameElement, slayxp, data, _a, j, img, masterData, kills, _loop_1, j, j, j, j, j, _i, _b, a, creature_1, creature_2, variant_1; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + // Check if we are trying to load a second task when only 1 is displayed + if (i == 1 && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.doubleLoaded) { + console.error("Cannot load double slayer task if only 1 is diaplyed!"); + return [2 /*return*/]; + } + // Check if we are trying to load a reaper task when 2 is displayed + if (i == 2 && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.reaperLoaded) { + console.error("Cannot load reaper task if there are 2 is diaplyed!"); + return [2 /*return*/]; + } + // Show we are loading + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_1__.getSide(i); + nameElement = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side); + if (nameElement === null) + return [2 /*return*/]; + if ((task == null && nameElement.innerHTML != "???") || nameElement.innerHTML.toLowerCase() === task.toLowerCase()) { + console.log("Update task: [" + count + "] " + task + " " + (i == 0 ? "(Default)" : (i == 2 ? "(Reaper)" : "(1 Slayer Token)"))); + // Update the kills and exp of the task since it's already loaded + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("kills", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(count); + slayxp = parseInt(_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("slayer-exp", side).innerHTML); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("total-slayer-exp", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas((slayxp * count).toFixed(2)); + // TODO update the count of the task for tracking (aka for status tracking) + // TODO Determine when to set start time based on count going down for first time + // TODO Calulate kills/hr and xp/hr based on this info + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + // Display the task data and log what we loaded + console.log("Load task: [" + count + "] " + task + " " + (i == 0 ? "(Default)" : (i == 2 ? "(Reaper)" : "(1 Slayer Token)"))); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("type", side).innerHTML = (i == 0 ? "(Default)" : (i == 2 ? "(Reaper)" : "(1 Slayer Token)")); + if (i == 2) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("type", side).id = "type-reaper"; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("kills", side).innerHTML = _extrafuncs__WEBPACK_IMPORTED_MODULE_2__.numberWithCommas(count); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side).innerHTML = task; + if (!(i == 2)) return [3 /*break*/, 2]; + return [4 /*yield*/, _data_reapers__WEBPACK_IMPORTED_MODULE_4__.get(task)]; + case 1: + _a = _c.sent(); + return [3 /*break*/, 4]; + case 2: return [4 /*yield*/, _data_assignments__WEBPACK_IMPORTED_MODULE_5__.get(task)]; + case 3: + _a = _c.sent(); + _c.label = 4; + case 4: + data = (_a); + if (!data) return [3 /*break*/, 10]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side).innerHTML = data["index"]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("name", side).title = data["index"]; + if (!(!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.ui.limited && !_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.limitedLoaded)) return [3 /*break*/, 9]; + // Setup the Masters Data + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("masters", side).innerHTML = "
Assignment Range
"; + j = 0; + _c.label = 5; + case 5: + if (!(j < data["masters"].length)) return [3 /*break*/, 8]; + img = "\"""; + return [4 /*yield*/, _data_masters__WEBPACK_IMPORTED_MODULE_3__.get(data["masters"][j])]; + case 6: + masterData = _c.sent(); + kills = masterData["task-counts"][data["index"]]; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("masters", side).innerHTML += "
" + img + " Kills: " + kills + "
"; + _c.label = 7; + case 7: + j++; + return [3 /*break*/, 5]; + case 8: + _loop_1 = function (j) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("masterInfo" + j, side).addEventListener('click', function () { _dochandler__WEBPACK_IMPORTED_MODULE_1__.open.wiki.master(i, j); }); + }; + // Setup the click events for masters and size for preview-task-wiki + for (j = 0; j < data["masters"].length; j++) { + _loop_1(j); + } + // Setup the Equipment Data + if (data["equipment"]) { + for (j = 0; j < 3; j++) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipInfo" + (j + 1), side).innerHTML = (j == 0 ? "None" : ""); + if (data["equipment"].length > 0) + for (j = 0; j < data["equipment"].length; j++) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipInfo" + (j + 1), side).innerHTML = data["equipment"][j] != "" ? data["equipment"][j] : "Database Empty"; + // Hide & Show the See More Link... + if (data["equipment"].length < 3) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipMore", side).style.visibility = "hidden"; + else + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipMore", side).style.visibility = "visible"; + } + else if (!data["equipment"]) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipMore", side).style.visibility = "hidden"; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("equipInfo1", side).innerHTML = "Database Missing"; + } + // Setup the Locations Data + if (data["locations"]) { + for (j = 0; j < 3; j++) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationInfo" + (j + 1), side).innerHTML = (j == 0 ? "None" : ""); + if (data["locations"].length > 0) + for (j = 0; j < data["locations"].length; j++) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationInfo" + (j + 1), side).innerHTML = data["locations"][j] != "" ? data["locations"][j] : "Database Empty"; + // Hide & Show the See More Link... + if (data["locations"].length < 3) + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationMore", side).style.visibility = "hidden"; + else + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationMore", side).style.visibility = "visible"; + } + else if (!data["locations"]) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationMore", side).style.visibility = "hidden"; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("locationInfo1", side).innerHTML = "Database Missing"; + } + // Setup the Creatures Data + if (data["creatures"]) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).innerHTML = ""; + for (_i = 0, _b = data["creatures"]; _i < _b.length; _i++) { + a = _b[_i]; + if (!_extrafuncs__WEBPACK_IMPORTED_MODULE_2__.listContains(data["hidden-creatures"], a)) { + if (data["default-creature"] && data["default-creature"].includes("#")) { + creature_1 = data["default-creature"].substring(0, data["default-creature"].indexOf("#")); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).innerHTML += ""; + } + else + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.elc("creatures", side).innerHTML += ""; + } + } + } + _c.label = 9; + case 9: + if (data["default-creature"]) { + creature_2 = data["default-creature"].substring(0, data["default-creature"].indexOf("#")); + variant_1 = data["default-creature"].substring(data["default-creature"].indexOf("#") + 1); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.change.creature(i, creature_2, variant_1); + } + else + _dochandler__WEBPACK_IMPORTED_MODULE_1__.change.creature(i); + _c.label = 10; + case 10: + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/dochandler/hide.ts": +/*!************************************!*\ + !*** ./modules/dochandler/hide.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignmentWikiPreview: () => (/* binding */ assignmentWikiPreview), +/* harmony export */ creatureWikiPreview: () => (/* binding */ creatureWikiPreview), +/* harmony export */ moreEquip: () => (/* binding */ moreEquip), +/* harmony export */ moreLocations: () => (/* binding */ moreLocations) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +// Hide the specific Creature's preview wiki page +function assignmentWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).style.visibility = "hidden"; +} +// Hide the specific Creature's preview wiki page +function creatureWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).style.visibility = "hidden"; +} +// Hide more Equipment for task +function moreEquip(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).style.visibility = "hidden"; +} +// Hide more Locations for task +function moreLocations(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).style.visibility = "hidden"; +} + + +/***/ }), + +/***/ "./modules/dochandler/hover.ts": +/*!*************************************!*\ + !*** ./modules/dochandler/hover.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignmentWiki: () => (/* binding */ assignmentWiki), +/* harmony export */ creatureWiki: () => (/* binding */ creatureWiki), +/* harmony export */ moreEquip: () => (/* binding */ moreEquip), +/* harmony export */ moreLocations: () => (/* binding */ moreLocations) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +// Hover the Assignment's wiki button +function assignmentWiki(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer = setTimeout(function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.assignmentWikiPreview(i); }, 500); + var hideTimer = null; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).onmouseleave = function () { hideTimer = setTimeout(function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.assignmentWikiPreview(i); }, 200); clearTimeout(showTimer); }; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).onmouseenter = function () { if (hideTimer != null) + clearTimeout(hideTimer); }; +} +// Hover the Creature's wiki button +function creatureWiki(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer = setTimeout(function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.creatureWikiPreview(i); }, 500); + var hideTimer = null; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).onmouseleave = function () { hideTimer = setTimeout(function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.creatureWikiPreview(i); }, 200); clearTimeout(showTimer); }; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).onmouseenter = function () { if (hideTimer != null) + clearTimeout(hideTimer); }; +} +// Hover more Equipment for task +function moreEquip(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer = setTimeout(function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.moreEquip(i); }, 500); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipMore", side).onmouseleave = function () { clearTimeout(showTimer); }; +} +// Hover more Locations for task +function moreLocations(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var showTimer = setTimeout(function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.show.moreLocations(i); }, 500); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationMore", side).onmouseleave = function () { clearTimeout(showTimer); }; +} + + +/***/ }), + +/***/ "./modules/dochandler/main.ts": +/*!************************************!*\ + !*** ./modules/dochandler/main.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ doubleLoaded: () => (/* binding */ doubleLoaded), +/* harmony export */ get: () => (/* binding */ get), +/* harmony export */ limitedLoaded: () => (/* binding */ limitedLoaded), +/* harmony export */ reaperLoaded: () => (/* binding */ reaperLoaded), +/* harmony export */ reset: () => (/* binding */ reset), +/* harmony export */ set: () => (/* binding */ set), +/* harmony export */ setup: () => (/* binding */ setup), +/* harmony export */ singleLoaded: () => (/* binding */ singleLoaded), +/* harmony export */ suggestedLoaded: () => (/* binding */ suggestedLoaded), +/* harmony export */ toggle: () => (/* binding */ toggle) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); +/* harmony import */ var _slayer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../slayer */ "./modules/slayer.ts"); +/* harmony import */ var _data_reapers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/reapers */ "./modules/data/reapers.ts"); +/* harmony import */ var _data_assignments__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/assignments */ "./modules/data/assignments.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + + +// TODO Clean up code +var singleLoaded = false, doubleLoaded = false, reaperLoaded = false, suggestedLoaded = false, limitedLoaded = true; +var get; +(function (get) { + // Get first element by class + function elc(name, e) { + if (e === void 0) { e = null; } + if (e && e.getElementsByClassName(name).length > 0) + return e.getElementsByClassName(name)[0]; + else if (!e && document.getElementsByClassName(name).length > 0) + return document.getElementsByClassName(name)[0]; + return null; + } + get.elc = elc; + // Get the element by id + function elid(id) { + return document.getElementById(id); + } + get.elid = elid; + // Get the current value in the search input + function searchInput() { + return _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value; + } + get.searchInput = searchInput; +})(get || (get = {})); +var reset; +(function (reset) { + // Reset from reaper tasks doc + function single() { + if (!singleLoaded) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base").innerHTML = ""; + singleLoaded = false; + } + reset.single = single; + // Reset from reaper tasks doc + function double() { + if (!doubleLoaded) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base").innerHTML = ""; + doubleLoaded = false; + } + reset.double = double; + // Reset from reaper tasks doc + function reaper() { + if (!reaperLoaded) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base").innerHTML = ""; + reaperLoaded = false; + } + reset.reaper = reaper; + // Reset from suggested tasks doc + function suggested() { + if (!suggestedLoaded) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base").innerHTML = ""; + suggestedLoaded = false; + } + reset.suggested = suggested; + // Reset the search box value to nothing + function searchBox() { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value = ""; + toggle.searchText(); + } + reset.searchBox = searchBox; +})(reset || (reset = {})); +var set; +(function (set) { + // Set to use a double document + function double(task0, task1, bypass) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if ((task0 == null || task1 == null) && !doubleLoaded) + return [2 /*return*/]; + console.log("Load Double: [" + task0.count + "] " + task0.name + " | [" + task1.count + "] " + task1.name); + // Reset all others + reset.single(); + reset.reaper(); + reset.suggested(); + if (!!doubleLoaded) return [3 /*break*/, 2]; + return [4 /*yield*/, setup.doubleAssignment()]; + case 1: + _a.sent(); + _a.label = 2; + case 2: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.assignment(0, task0.name, task0.count)]; + case 3: + _a.sent(); + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.assignment(1, task1.name, task1.count)]; + case 4: + _a.sent(); + // Log history if not bypassed + if (!bypass && task0.name && task1.name) + _settings__WEBPACK_IMPORTED_MODULE_1__.change.addHistory({ type: 'double', tasks: [task0, task1] }); + return [2 /*return*/]; + } + }); + }); + } + set.double = double; + // Set to use a single document + function single(task, bypass) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (task == null && !singleLoaded) + return [2 /*return*/]; + console.log("Load Single: [" + task.count + "] " + task.name); + // Reset all others + reset.double(); + reset.reaper(); + reset.suggested(); + if (!!singleLoaded) return [3 /*break*/, 2]; + return [4 /*yield*/, setup.singleAssignment(0)]; + case 1: + _a.sent(); + _a.label = 2; + case 2: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.assignment(0, task.name, task.count)]; + case 3: + _a.sent(); + // Log history if not bypassed + if (!bypass && task.name) + _settings__WEBPACK_IMPORTED_MODULE_1__.change.addHistory({ type: 'single', tasks: [task] }); + return [2 /*return*/]; + } + }); + }); + } + set.single = single; + // Set to use reaper tasks doc + function reaper(task, bypass) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (task == null && !reaperLoaded) + return [2 /*return*/]; + console.log("Load Reaper: [" + task.count + "] " + task.name); + // Reset all others + reset.single(); + reset.double(); + reset.suggested(); + return [4 /*yield*/, setup.singleAssignment(2)]; + case 1: + // Setup the page and display the data + return [4 /*yield*/, _a.sent()]; + case 2: + // Setup the page and display the data + _a.sent(); + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.reaper(task.name, task.count)]; + case 3: + _a.sent(); + // Log history if not bypassed + if (!bypass && task.name) + _settings__WEBPACK_IMPORTED_MODULE_1__.change.addHistory({ type: 'reaper', tasks: [task] }); + return [2 /*return*/]; + } + }); + }); + } + set.reaper = reaper; + // Set to use suggested tasks doc + function suggested(bypass) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (suggestedLoaded) + return [2 /*return*/]; + console.log("Load Suggested!"); + // Reset all others + reset.single(); + reset.double(); + reset.reaper(); + // Setup the page and display the data + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.setup.suggested()]; + case 1: + // Setup the page and display the data + _a.sent(); + // Log history if not bypassed + if (!bypass) + _settings__WEBPACK_IMPORTED_MODULE_1__.change.addHistory({ type: 'suggestion', tasks: null }); + return [2 /*return*/]; + } + }); + }); + } + set.suggested = suggested; + // Set search button + function searchButtonText(s) { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-button").innerHTML = s + ". . ."; + } + set.searchButtonText = searchButtonText; + // Set the search input + function searchInput(s) { + if (s == null) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value = s; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.toggle.searchText(); + } + set.searchInput = searchInput; +})(set || (set = {})); +var setup; +(function (setup) { + // Setup the main document + function documentMain() { + return __awaiter(this, void 0, void 0, function () { + var _a, str; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("nis"); + return [4 /*yield*/, fetch("./pages/doc/body.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _b.sent(); + str = "Empty"; + // Setup the event listeners for everything + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("infobutton").addEventListener('click', _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.aboutInfo); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("menubutton").addEventListener('click', _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.settingsPage); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("donatebutton").addEventListener('click', _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.donate); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("backbutton").addEventListener('click', _settings__WEBPACK_IMPORTED_MODULE_1__.change.goPreviousHistory); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("forwardbutton").addEventListener('click', _settings__WEBPACK_IMPORTED_MODULE_1__.change.goNextHistory); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-button").addEventListener('click', function () { _slayer__WEBPACK_IMPORTED_MODULE_2__.searchTasks(); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").addEventListener('input', _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.toggle.searchText); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").addEventListener('change', function () { _slayer__WEBPACK_IMPORTED_MODULE_2__.searchTasks(); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").addEventListener('keyup', function (event) { + switch (event.key) { + case "ArrowUp": + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchInput(_settings__WEBPACK_IMPORTED_MODULE_1__.search.getPreviousHistory()); + break; + case "ArrowDown": + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchInput(_settings__WEBPACK_IMPORTED_MODULE_1__.search.getNextHistory()); + break; + } + }); + // Load the list of all assignments into the search feature (aka datalist) + _data_reapers__WEBPACK_IMPORTED_MODULE_3__.getIndexList().then(function (r) { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info-list").innerHTML = r; }); + _data_assignments__WEBPACK_IMPORTED_MODULE_4__.getIndexList().then(function (r) { return _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info-list").innerHTML += r; }); + return [2 /*return*/]; + } + }); + }); + } + setup.documentMain = documentMain; + // Setup the base for double assignment + function doubleAssignment() { + return __awaiter(this, void 0, void 0, function () { + var _a, _loop_1, i; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + limitedLoaded = true; + _a = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + return [4 /*yield*/, fetch("./pages/doc/dual.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _b.sent(); + _loop_1 = function (i) { + var side, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _c = side; + return [4 /*yield*/, fetch("./pages/doc/example.html").then(function (r) { return r.text(); })]; + case 1: + _c.innerHTML = _e.sent(); + // Setup the event listeners for everything + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('click', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.assignment(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('mouseover', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.assignmentWiki(i); }); + if (!!_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) return [3 /*break*/, 3]; + _d = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("extra-info", side); + return [4 /*yield*/, fetch("./pages/doc/example-extra.html").then(function (r) { return r.text(); })]; + case 2: + _d.innerHTML = _e.sent(); + limitedLoaded = false; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.assignmentWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.creatureWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipMore", side).addEventListener('mouseenter', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationMore", side).addEventListener('mouseenter', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('click', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('mouseover', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.creatureWiki(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creatures", side).addEventListener('change', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("variants", side).addEventListener('change', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.variant(i); }); + _e.label = 3; + case 3: return [2 /*return*/]; + } + }); + }; + i = 0; + _b.label = 2; + case 2: + if (!(i < 2)) return [3 /*break*/, 5]; + return [5 /*yield**/, _loop_1(i)]; + case 3: + _b.sent(); + _b.label = 4; + case 4: + i++; + return [3 /*break*/, 2]; + case 5: + // Adjust the doc for limited and full + adjustForSettings(); + doubleLoaded = true; + return [2 /*return*/]; + } + }); + }); + } + setup.doubleAssignment = doubleAssignment; + // Setup the base for single assignment + function singleAssignment(i) { + return __awaiter(this, void 0, void 0, function () { + var _a, side, _b, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + limitedLoaded = true; + _a = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + return [4 /*yield*/, fetch("./pages/doc/single.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _d.sent(); + side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _b = side; + return [4 /*yield*/, fetch("./pages/doc/example.html").then(function (r) { return r.text(); })]; + case 2: + _b.innerHTML = _d.sent(); + // Setup the event listeners for everything + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('click', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.assignment(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("task-wiki", side).addEventListener('mouseover', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.assignmentWiki(i); }); + if (!!_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) return [3 /*break*/, 4]; + _c = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("extra-info", side); + return [4 /*yield*/, fetch("./pages/doc/example-extra.html").then(function (r) { return r.text(); })]; + case 3: + _c.innerHTML = _d.sent(); + limitedLoaded = false; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.assignmentWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.creatureWikiPreview(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipMore", side).addEventListener('mouseenter', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreEquip(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationMore", side).addEventListener('mouseenter', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).addEventListener('mouseleave', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hide.moreLocations(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('click', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.open.wiki.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creature-wiki", side).addEventListener('mouseover', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.hover.creatureWiki(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creatures", side).addEventListener('change', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.creature(i); }); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("variants", side).addEventListener('change', function () { _dochandler__WEBPACK_IMPORTED_MODULE_0__.change.variant(i); }); + _d.label = 4; + case 4: + // Adjust if status is visible + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.status) + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("status", side).style.visibility = "visible"; + else + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("status", side).style.visibility = "hidden"; + // Adjust the doc for limited and full + adjustForSettings(); + if (i == 2) + reaperLoaded = true; + else + singleLoaded = true; + return [2 /*return*/]; + } + }); + }); + } + setup.singleAssignment = singleAssignment; + // Setup the base for suggested + function suggested() { + return __awaiter(this, void 0, void 0, function () { + var side, _a, suggestType, _loop_2, i; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base"); + _a = side; + return [4 /*yield*/, fetch("./pages/doc/suggested.html").then(function (r) { return r.text(); })]; + case 1: + _a.innerHTML = _b.sent(); + suggestType = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("type-suggest"); + if (suggestType) + suggestType.addEventListener('click', function () { window.open("https://runescape.wiki/w/Slayer_training/High-levelled"); }); + _loop_2 = function (i) { + var element = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("suggestion-" + i); + if (element) + element.addEventListener('click', function () { _slayer__WEBPACK_IMPORTED_MODULE_2__.searchTasks(element.innerHTML); }); + }; + for (i = 1; i <= 12; i++) { + _loop_2(i); + } + suggestedLoaded = true; + return [2 /*return*/]; + } + }); + }); + } + setup.suggested = suggested; + // If limited the lets set the size of the base + function adjustForSettings() { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base").classList.remove("base-full"); + if (_dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("divide")) + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("divide").classList.remove("divide-full"); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("copyright").classList.remove("copyright-full"); + } + else { + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("base").classList.add("base-full"); + if (_dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("divide")) + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("divide").classList.add("divide-full"); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("copyright").classList.add("copyright-full"); + } + } +})(setup || (setup = {})); +var toggle; +(function (toggle) { + // Toggle if we are capturing screen or searching text + function searchText() { + if (_slayer__WEBPACK_IMPORTED_MODULE_2__.searchResult || (!_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.autoCapture.enabled && _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.searchInput() === "")) + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchButtonText("Capture"); + else + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.searchButtonText("Search"); + } + toggle.searchText = searchText; +})(toggle || (toggle = {})); + + +/***/ }), + +/***/ "./modules/dochandler/open.ts": +/*!************************************!*\ + !*** ./modules/dochandler/open.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ aboutInfo: () => (/* binding */ aboutInfo), +/* harmony export */ donate: () => (/* binding */ donate), +/* harmony export */ settingsPage: () => (/* binding */ settingsPage), +/* harmony export */ wiki: () => (/* binding */ wiki) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +// Open the Donate Page (https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ) +function donate() { + window.open("https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ"); +} +// Open the about info page +function aboutInfo() { + window.open("./pages/about.html", null, "width=680,height=550"); +} +// Open the settings page +function settingsPage() { + var settingsWindow = window.open("./pages/settings.html", "_blank", "width=420,height=550"); + console.warn("Settings Opened!"); + settingsWindow.window.console.warn("Settings Loaded!"); + settingsWindow.addEventListener('keyup', function (e) { + if ((e.which || e.keyCode) == 116) { + // FIXME Disabled F5 for now, need to find out how to fix this so it just re-hooks events on refresh + e.preventDefault(); + } + }); + settingsWindow.addEventListener('beforeunload', function () { + // Load the new settings and apply them + _settings__WEBPACK_IMPORTED_MODULE_1__.controller.load(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.toggle.searchText(); + // FIXME Make it so when we unload, we can reload the settings in case user pressed F5 + console.warn("Settings Closed!"); + settingsWindow.window.console.warn("Settings Saved!"); + }); +} +var wiki; +(function (wiki) { + // Open the specific Task's wiki page + function assignment(i) { + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var task = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("name", side).innerHTML; + if (task != null) + window.open('https://runescape.wiki/' + task + '_(Slayer_assignment)'); + } + wiki.assignment = assignment; + // Open the specific Creature's wiki page + function creature(i) { + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var creature = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("creatures", side).value; + var variant = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("variants", side).value; + if (creature != null && variant != null) + window.open('https://runescape.wiki/' + creature + "#" + variant); + } + wiki.creature = creature; + // Open the specific Master wiki page + function master(i, j) { + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + var master = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("masterImage" + j, side).alt; + if (master != null) + window.open('https://runescape.wiki/' + master); + } + wiki.master = master; +})(wiki || (wiki = {})); + + +/***/ }), + +/***/ "./modules/dochandler/show.ts": +/*!************************************!*\ + !*** ./modules/dochandler/show.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ assignmentWikiPreview: () => (/* binding */ assignmentWikiPreview), +/* harmony export */ creatureWikiPreview: () => (/* binding */ creatureWikiPreview), +/* harmony export */ moreEquip: () => (/* binding */ moreEquip), +/* harmony export */ moreLocations: () => (/* binding */ moreLocations) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../settings */ "./modules/settings.ts"); + + +// Show the specific Creature's preview wiki page +function assignmentWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-task-wiki", side).style.visibility = "visible"; +} +// Show the specific Creature's preview wiki page +function creatureWikiPreview(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("preview-creature-wiki", side).style.visibility = "visible"; +} +// Show more Equipment for task +function moreEquip(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + if (_dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).innerHTML != null && _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).innerHTML.trimEnd() != "") + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("equipHidden", side).style.visibility = "visible"; +} +// Show more Locations for task +function moreLocations(i) { + if (_settings__WEBPACK_IMPORTED_MODULE_1__.controller.data.ui.limited) + return; + var side = _dochandler__WEBPACK_IMPORTED_MODULE_0__.getSide(i); + if (_dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).innerHTML != null && _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).innerHTML.trimEnd() != "") + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elc("locationHidden", side).style.visibility = "visible"; +} + + +/***/ }), + +/***/ "./modules/extrafuncs.ts": +/*!*******************************!*\ + !*** ./modules/extrafuncs.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ calculateAspectRatioFit: () => (/* binding */ calculateAspectRatioFit), +/* harmony export */ decodeHtml: () => (/* binding */ decodeHtml), +/* harmony export */ listContains: () => (/* binding */ listContains), +/* harmony export */ numberWithCommas: () => (/* binding */ numberWithCommas) +/* harmony export */ }); +// Add commas into a number if its big enough +function numberWithCommas(n) { + if (n == null) + return "Empty"; + if (n == -666) + return "Error"; + return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} +// Check if the list contains what you want to find +function listContains(list, find) { + for (var l in list) + if (decodeHtml(list[l]).toLowerCase() === decodeHtml(find).toLowerCase()) + return true; + return false; +} +// Get new width and height for image based on aspec ratio +function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) { + var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight); + return { width: srcWidth * ratio, height: srcHeight * ratio }; +} +// Decode the Html chars that have been encoded during database downloading +function decodeHtml(html) { + var txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; +} + + +/***/ }), + +/***/ "./modules/settings.ts": +/*!*****************************!*\ + !*** ./modules/settings.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AutoCaptureData: () => (/* binding */ AutoCaptureData), +/* harmony export */ DefaultData: () => (/* binding */ DefaultData), +/* harmony export */ HiddenData: () => (/* binding */ HiddenData), +/* harmony export */ SettingsData: () => (/* binding */ SettingsData), +/* harmony export */ SettingsDataController: () => (/* binding */ SettingsDataController), +/* harmony export */ UIData: () => (/* binding */ UIData), +/* harmony export */ change: () => (/* binding */ change), +/* harmony export */ controller: () => (/* binding */ controller), +/* harmony export */ executeDevTools: () => (/* binding */ executeDevTools), +/* harmony export */ search: () => (/* binding */ search) +/* harmony export */ }); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _slayer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slayer */ "./modules/slayer.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + +// Add Auto Capture Data +var AutoCaptureData = /** @class */ (function () { + function AutoCaptureData() { + } + return AutoCaptureData; +}()); + +// All UI Data +var UIData = /** @class */ (function () { + function UIData() { + } + return UIData; +}()); + +// All Hidden Data +var DefaultData = /** @class */ (function () { + function DefaultData() { + } + return DefaultData; +}()); + +// All Hidden Data +var HiddenData = /** @class */ (function () { + function HiddenData() { + } + return HiddenData; +}()); + +// All settings data +var SettingsData = /** @class */ (function () { + function SettingsData() { + } + return SettingsData; +}()); + +// Controls all the settings data +var SettingsDataController = /** @class */ (function () { + function SettingsDataController() { + this.configLoaded = false; + this.data = { + version: 1, + searchAlgorithim: "default", + autoCapture: { + enabled: true, + counter: true, + search: false, + loopTimer: 500, + counterTimer: 500, + dialogTimer: 5000, + searchTimer: 10000, + }, + ui: { + style: "default", // TODO Select sytle for the app (Needs finished later on) + limited: false, + status: true, + counter: false, + counterTimer: 500, + historyRetentionCount: 10, // TODO How many search results to keep in history (0 = unlimited) + lookupRetentionCount: 0, // TODO How many lookup results to keep in history (0 = unlimited) + }, + showHidden: { + creatures: false, + eliteCreatures: false, + dragonkinCreatures: false, + godWarsCreatures: false, + ghorrockCreatures: false, + heartGielinorCreatures: false, + monsterCreatures: false, + newVarrockCreatures: false, + shadowReefCreatures: false, + strongholdSecurityCreatures: false, + summonedCreatures: false, + templeTrekkingCreatures: false, + unchartedIslesCreatures: false + }, + default: { + taskName0: "waterfiends", + taskName1: "black demons", + taskCount0: 777, + taskCount1: 666 + // TODO Add more default data later on + }, + }; + } + // Load the users settings + SettingsDataController.prototype.load = function () { + return __awaiter(this, void 0, void 0, function () { + var res; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Load the versioning system to make sure old settings get updated (Max Version ???.256.256) + if (window.localStorage.getItem('version') != null) + this.data.version = this.decodeVersion(window.localStorage.getItem('version')); + // Add Versioning system to allow compatibility with future updates (Should only ever run once) + if (this.data.version <= 5 && !this.configLoaded) { + console.log("(Versioning System Missing) Setting up versioning system."); + // Remove the alpha/beta recent task system, we are replacing it with a new defaults loading system + if (window.localStorage.getItem('recent_task_0') != null) + window.localStorage.removeItem('recent_task_0'); + if (window.localStorage.getItem('recent_task_count_0') != null) + window.localStorage.removeItem('recent_task_count_0'); + if (window.localStorage.getItem('recent_task_1') != null) + window.localStorage.removeItem('recent_task_1'); + if (window.localStorage.getItem('recent_task_count_1') != null) + window.localStorage.removeItem('recent_task_count_1'); + // If this is the first setup since versions system we need to set the defaults with a save + this.save(); + } + return [4 /*yield*/, fetch("./data/version.json").then(function (r) { return r.json(); })]; + case 1: + res = _a.sent(); + if (this.data.version < this.decodeVersion(res['version'])) + this.data.version = this.decodeVersion(res['version']); + // TODO Load basic settings here + controller.data.autoCapture.enabled = window.localStorage.getItem("auto-capture-enabled") === "true"; + controller.data.autoCapture.counter = window.localStorage.getItem("auto-capture-counter") === "true"; + controller.data.autoCapture.search = window.localStorage.getItem("auto-capture-search") === "true"; + controller.data.autoCapture.loopTimer = parseInt(window.localStorage.getItem("auto-capture-timer-loop")); + controller.data.autoCapture.dialogTimer = parseInt(window.localStorage.getItem("auto-capture-timer-dialog")); + controller.data.autoCapture.counterTimer = parseInt(window.localStorage.getItem("auto-capture-timer-counter")); + controller.data.autoCapture.searchTimer = parseInt(window.localStorage.getItem("auto-capture-timer-search")); + controller.data.ui.limited = window.localStorage.getItem("ui-limited") === "true"; + controller.data.ui.status = window.localStorage.getItem("ui-status") === "true"; + controller.data.ui.counter = window.localStorage.getItem("ui-counter") === "true"; + controller.data.ui.counterTimer = parseInt(window.localStorage.getItem("ui-counter-timer")); + // TODO Load history here then we reset the ui and load them + // Reset the ui so we make sure to update the correct info on it + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.single(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.double(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.reaper(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.suggested(); + if (!(this.data.default.taskName0 != null && this.data.default.taskName1 != null)) return [3 /*break*/, 3]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.double({ name: this.data.default.taskName0, count: this.data.default.taskCount0 }, { name: this.data.default.taskName1, count: this.data.default.taskCount1 })]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + if (!(this.data.default.taskName0 != null && this.data.default.taskName1 == null)) return [3 /*break*/, 5]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.single({ name: this.data.default.taskName0, count: this.data.default.taskCount0 })]; + case 4: + _a.sent(); + _a.label = 5; + case 5: + // Print out that we loaded the settings + console.warn("Config Loaded"); + this.configLoaded = true; + return [2 /*return*/]; + } + }); + }); + }; + // Save the users settings + SettingsDataController.prototype.save = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + // Save versioning system + if (this.data.version > 1) + window.localStorage.setItem('version', this.encodeVersion(this.data.version)); + // TODO Add save settings + window.localStorage.setItem("auto-capture-enabled", "" + controller.data.autoCapture.enabled); + window.localStorage.setItem("auto-capture-counter", "" + controller.data.autoCapture.counter); + window.localStorage.setItem("auto-capture-search", "" + controller.data.autoCapture.search); + window.localStorage.setItem("auto-capture-timer-loop", "" + controller.data.autoCapture.loopTimer); + window.localStorage.setItem("auto-capture-timer-dialog", "" + controller.data.autoCapture.dialogTimer); + window.localStorage.setItem("auto-capture-timer-counter", "" + controller.data.autoCapture.counterTimer); + window.localStorage.setItem("auto-capture-timer-search", "" + controller.data.autoCapture.searchTimer); + window.localStorage.setItem("ui-limited", "" + controller.data.ui.limited); + window.localStorage.setItem("ui-status", "" + controller.data.ui.status); + window.localStorage.setItem("ui-counter", "" + controller.data.ui.counter); + window.localStorage.setItem("ui-counter-timer", "" + controller.data.ui.counterTimer); + // Print out that we saved the settings + console.warn("Config Saved"); + return [2 /*return*/]; + }); + }); + }; + SettingsDataController.prototype.decodeVersion = function (version) { + var versionSplit = version.split("\."); + var versionUpper = versionSplit.length > 2 ? parseInt(versionSplit[0]) : 0; + var versionLower = parseInt(versionSplit.length > 2 ? versionSplit[1] : versionSplit[0]); + var versionPatch = parseInt(versionSplit.length > 2 ? versionSplit[2] : versionSplit[1]); + return ((versionUpper * 256 * 256) + (versionLower * 256) + versionPatch); + }; + SettingsDataController.prototype.encodeVersion = function (version) { + var versionUpper = version > 256 * 256 ? version / (256 * 256) : 0; + var versionLower = version > 256 ? (version - (versionUpper * 256 * 256)) / 256 : 0; + var versionPatch = (version - (versionUpper * 256 * 256) - (versionLower * 256)); + return versionUpper + "." + versionLower + "." + versionPatch; + }; + return SettingsDataController; +}()); + +var controller = new SettingsDataController(); +// All functions that deal with lookup history are here +var change; +(function (change) { + change.history = []; + change.index = 0; + // Add change history for forward and back buttons + function addHistory(history) { + if (!history || !history.tasks || !change.history[change.index]) + return; + // Check if is previous history and if so abort + if ((history.type === "single" || history.type === "reaper") && history.tasks[0].name === change.history[change.index].tasks[0].name) + return; + if (history.type === "double" && history.tasks[0].name === change.history[change.index].tasks[0].name && history.tasks[1].name === change.history[change.index].tasks[1].name) + return; + if (history.type === "suggestion" && history.type === change.history[change.index].type) + return; + // Add Change History + if (change.index + 1 != change.history.length) + change.history = change.history.slice(0, change.index + 1); + change.history.push(history); + change.index = change.history.length - 1; + // Save change history + console.warn("Save History"); + controller.save(); + } + change.addHistory = addHistory; + // Go to previous change history + function refreshCurrent() { + if (change.index < 0 || change.index >= change.history.length) + return; + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.single(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.double(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.reaper(); + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.reset.suggested(); + // Get previous change history and then set the data + var previousChange = change.history[change.index]; + if (previousChange.type === 'double') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.double(previousChange.tasks[0], previousChange.tasks[1], true); + if (previousChange.type === 'single') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.single(previousChange.tasks[0], true); + if (previousChange.type === 'reaper') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.reaper(previousChange.tasks[0], true); + if (previousChange.type === 'suggestion') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.suggested(true); + // Save change history + console.warn("Save History"); + controller.save(); + } + change.refreshCurrent = refreshCurrent; + // Go to previous change history + function goPreviousHistory() { + if (change.index - 1 < 0) + return; + // Get previous change history and then set the data + var previousChange = change.history[--change.index]; + if (previousChange.type === 'double') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.double(previousChange.tasks[0], previousChange.tasks[1], true); + if (previousChange.type === 'single') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.single(previousChange.tasks[0], true); + if (previousChange.type === 'reaper') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.reaper(previousChange.tasks[0], true); + if (previousChange.type === 'suggestion') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.suggested(true); + // Save change history + console.warn("Save History"); + controller.save(); + } + change.goPreviousHistory = goPreviousHistory; + // Go to next change history + function goNextHistory() { + if (change.index + 1 >= change.history.length) + return; + // Get next change history and then set the data + var nextChange = change.history[++change.index]; + if (nextChange.type === 'double') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.double(nextChange.tasks[0], nextChange.tasks[1], true); + if (nextChange.type === 'single') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.single(nextChange.tasks[0], true); + if (nextChange.type === 'reaper') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.reaper(nextChange.tasks[0], true); + if (nextChange.type === 'suggestion') + _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.set.suggested(true); + // Save change history + console.warn("Save History"); + controller.save(); + } + change.goNextHistory = goNextHistory; +})(change || (change = {})); +// All functions that deal with searching are here +var search; +(function (search) { + search.temp = null; + search.history = []; + search.index = 0; + // Add search history and then reset for next search + function addHistory(value) { + if (!value || value == '') + return; + // TODO Adjust the search history to be in sessionStorage instead + // Add Search History + search.history.push(value); + search.index = search.history.length; + search.temp = null; + // Save search history + console.warn("Save History"); + controller.save(); + } + search.addHistory = addHistory; + // Get the previous search history + function getPreviousHistory() { + // Deal with the temp search value + tempValue(); + // Save history and then return the correct history + console.warn("Save History"); + controller.save(); + if (search.index - 1 < 0) + return null; + if (--search.index == search.history.length) + return search.temp; + return search.history[search.index]; + } + search.getPreviousHistory = getPreviousHistory; + // Get the next search history + function getNextHistory() { + // Deal with the temp search value + tempValue(); + // Save history and then return the correct history + console.warn("Save History"); + controller.save(); + if (search.index + 1 > search.history.length + (search.temp == "" ? 0 : 1)) + return null; + if (++search.index == search.history.length + (search.temp == "" ? 0 : 1)) + return ""; + if (search.temp != "" && search.index == search.history.length) + return search.temp; + return search.history[search.index]; + } + search.getNextHistory = getNextHistory; + function tempValue() { + // Setup temp search value while it is empty + if (search.temp == null) + search.temp = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value; + // Setup temp search value if the value changed + if (search.index == search.history.length && search.temp != _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value) + search.temp = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value; + // Setup temp search value if new entry is added + if (search.index == search.history.length + 1 && _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value != "") { + search.temp = _dochandler__WEBPACK_IMPORTED_MODULE_0__.main.get.elid("search-info").value; + --search.index; + } + } +})(search || (search = {})); +// ~~~~ DevTools ~~~~ +function executeDevTools(value) { + return __awaiter(this, void 0, void 0, function () { + var counterData, slayerData, a, a, pos, box, a, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (value === "devTools") { + console.log(" ~~~ Dev Tools ~ Information Opened ~~~ "); + alt1.openBrowser("https://runeapps.org/forums/viewtopic.php?id=101"); + return [2 /*return*/]; + } + console.log(" ~~~ Dev Tools ~ Started ~~~ "); + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + if (value === "size") + console.log("Current Size: " + document.body.clientWidth + ", " + document.body.clientHeight); + if (!(value === "counterReader")) return [3 /*break*/, 3]; + return [4 /*yield*/, _slayer__WEBPACK_IMPORTED_MODULE_1__.counterReader.read()]; + case 2: + counterData = _a.sent(); + if (counterData) { + console.log("The Counter UI Collapsed [" + counterData.collapsed + "]"); + console.log("The Counter UI Old School [" + counterData.OS + "]"); + console.log("The Counter UI Reaper [" + counterData.reaper + "]"); + console.log("The Counter UI Count [" + counterData.count + "]"); + console.log("The Counter UI Task [" + counterData.task + "]"); + } + else + console.log(" ~~~ Dev Tools ~ Error: Cannot read counter data! ~~~ "); + _a.label = 3; + case 3: + if (!(value === "slayerReader")) return [3 /*break*/, 5]; + return [4 /*yield*/, _slayer__WEBPACK_IMPORTED_MODULE_1__.slayerReader.read()]; + case 4: + slayerData = _a.sent(); + if (slayerData) { + console.log("The Slayer Reader Select Your Own [" + slayerData.selectYourOwn + "]"); + console.log("The Slayer Reader Reaper [" + slayerData.reaper + "]"); + console.log("The Slayer Reader Ticket [" + slayerData.ticket + "]"); + for (a in slayerData.count) + console.log("The Slayer Reader Count{" + a + "} [" + slayerData.count[a] + "]"); + for (a in slayerData.count) + console.log("The Slayer Reader Task{" + a + "} [" + slayerData.task[a] + "]"); + } + else + console.log(" ~~~ Dev Tools ~ Error: Cannot read slayer data! ~~~ "); + _a.label = 5; + case 5: + if (value === "dialogReader") { + console.log("Searching for Dialog..."); + pos = _slayer__WEBPACK_IMPORTED_MODULE_1__.slayerReader.dialogReader.find(); + if (!pos) { + console.log(" ~~~ Dev Tools ~ Error: Cannot find the Dialog! ~~~ "); + return [2 /*return*/]; + } + box = _slayer__WEBPACK_IMPORTED_MODULE_1__.slayerReader.dialogReader.read(); + if (!box) { + console.log(" ~~~ Dev Tools ~ Error: Cannot read the Dialog! ~~~ "); + return [2 /*return*/]; + } + // Output all relivant data to the console + if (box.title) + console.log("The Dialog Box Title [" + box.title.toString() + "]"); + if (box.text) + console.log("The Dialog Box Text [" + box.text.toString() + "]"); + if (box.opts) { + console.log("The Dialog Box Options (" + box.opts.length + ") [" + box.opts.toString() + "]"); + for (a in box.opts) + console.log("\t" + (Number(a) + 1) + ". " + box.opts[a].text); + } + } + return [3 /*break*/, 7]; + case 6: + e_1 = _a.sent(); + console.error("~~~ Dev Tools ~ Error: Issue Capturing Screen! ~~~ "); + return [3 /*break*/, 7]; + case 7: + console.log(" ~~~ Dev Tools ~ Finished ~~~ "); + return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./modules/slayer.ts": +/*!***************************!*\ + !*** ./modules/slayer.ts ***! + \***************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ canCaptureRunescape: () => (/* binding */ canCaptureRunescape), +/* harmony export */ captureRunescape: () => (/* binding */ captureRunescape), +/* harmony export */ counterReader: () => (/* binding */ counterReader), +/* harmony export */ findTask: () => (/* binding */ findTask), +/* harmony export */ loopRunning: () => (/* binding */ loopRunning), +/* harmony export */ searchAlgo: () => (/* binding */ searchAlgo), +/* harmony export */ searchResult: () => (/* binding */ searchResult), +/* harmony export */ searchTasks: () => (/* binding */ searchTasks), +/* harmony export */ slayerReader: () => (/* binding */ slayerReader), +/* harmony export */ timer: () => (/* binding */ timer) +/* harmony export */ }); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! alt1 */ "../node_modules/alt1/dist/base/index.js"); +/* harmony import */ var alt1__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(alt1__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./modules/settings.ts"); +/* harmony import */ var _dochandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _SearchAlgorithm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SearchAlgorithm */ "./modules/SearchAlgorithm.ts"); +/* harmony import */ var _SlayerDialogReader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SlayerDialogReader */ "./modules/SlayerDialogReader.ts"); +/* harmony import */ var _UICounterReader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UICounterReader */ "./modules/UICounterReader.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + + + +// Get a timer, Dialog Reader, and Counter Reader +var timer = function (ms) { return new Promise(function (res) { return setTimeout(res, ms); }); }; +var searchAlgo = new _SearchAlgorithm__WEBPACK_IMPORTED_MODULE_2__.SearchAlgorithm(); +var slayerReader = new _SlayerDialogReader__WEBPACK_IMPORTED_MODULE_3__.SlayerDialogReader(); +var counterReader = new _UICounterReader__WEBPACK_IMPORTED_MODULE_4__.UICounterReader(); +var loopRunning = false, searchResult = false; +; +// Check to see if we can capture the current screen +function canCaptureRunescape() { + return window.alt1 && alt1.rsLinked && alt1.permissionPixel; +} +// Capture the current runescape screen and return it +function captureRunescape() { + if (!canCaptureRunescape()) + return null; + try { + return alt1__WEBPACK_IMPORTED_MODULE_5__.captureHoldFullRs(); + } + catch (ex) { + if (ex.message === "capturehold failed") + console.warn("Capturing screen failed! Is runescape open?"); + } + return null; +} +// Find a task on the current screen in multiple different ways +function findTask(buffer) { + return __awaiter(this, void 0, void 0, function () { + var slayerData, counterData; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // If autoCapture is disabled, loo is already running, or we have a search result then return + if (!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.enabled || loopRunning || searchResult) + return [2 /*return*/]; + // If there is no image, attempt to capture a new one + if (!buffer) + buffer = captureRunescape(); + if (!buffer) + return [2 /*return*/]; + // Set the loop to running and reset the loading icon + loopRunning = true; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [4 /*yield*/, slayerReader.read(buffer)]; + case 1: + slayerData = _a.sent(); + if (!(slayerData && slayerData[0])) return [3 /*break*/, 11]; + // If we found a slayer dialog then set loading + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + if (!slayerData.selectYourOwn) return [3 /*break*/, 3]; + // Update the data in window + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.suggested(); + // End Loading animation, wait 5 secs and then return + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.dialogTimer)]; + case 2: + _a.sent(); + loopRunning = false; + return [2 /*return*/]; + case 3: + if (!(slayerData.reaper && !slayerData.ticket)) return [3 /*break*/, 5]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.reaper({ name: slayerData[0].task, count: slayerData[0].count })]; + case 4: + _a.sent(); + return [3 /*break*/, 9]; + case 5: + if (!slayerData.ticket) return [3 /*break*/, 7]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.double({ name: slayerData[0].task, count: slayerData[0].count }, { name: slayerData[1].task, count: slayerData[1].count })]; + case 6: + _a.sent(); + return [3 /*break*/, 9]; + case 7: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.single({ name: slayerData[0].task, count: slayerData[0].count })]; + case 8: + _a.sent(); + _a.label = 9; + case 9: + // End Loading animation, wait 5 secs and then return + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.dialogTimer)]; + case 10: + _a.sent(); + loopRunning = false; + return [2 /*return*/]; + case 11: + if (!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.counter) return [3 /*break*/, 18]; + return [4 /*yield*/, counterReader.read(buffer)]; + case 12: + counterData = _a.sent(); + if (!counterData) return [3 /*break*/, 18]; + // If we can see the Slayer Count UI for RS3, lets let them know we are loading + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loading(); + if (!(counterData.reaper && (_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.reaperLoaded || counterData.task != null))) return [3 /*break*/, 14]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.reaper({ name: counterData.task, count: counterData.count })]; + case 13: + _a.sent(); + return [3 /*break*/, 16]; + case 14: + if (!(!counterData.reaper && (_dochandler__WEBPACK_IMPORTED_MODULE_1__.main.singleLoaded || counterData.task != null))) return [3 /*break*/, 16]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.single({ name: counterData.task, count: counterData.count })]; + case 15: + _a.sent(); + _a.label = 16; + case 16: + // End Loading animation, wait 5 secs and then return + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.counterTimer)]; + case 17: + _a.sent(); + loopRunning = false; + return [2 /*return*/]; + case 18: + // Finish up by stoping the loading animation and wait 0.5 seconds before we start capturing again + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + loopRunning = false; + return [2 /*return*/]; + } + }); + }); +} +// Search for the task by value of the search box +function searchTasks(value) { + return __awaiter(this, void 0, void 0, function () { + var tool, lookup, tasks, _a, _b, _c, _i, a, data; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + // Get the current search value, reset it, & add search history + if (!value) + value = _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.get.searchInput(); + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.reset.searchBox(); + _settings__WEBPACK_IMPORTED_MODULE_0__.search.addHistory(value); + // Handle the search in different ways + if (value.length == 0 && (searchResult || !_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.enabled)) { + // Do a manual capture + searchResult = false; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.toggle.searchText(); + findTask(); + return [2 /*return*/]; + } + else if (value.startsWith("devTools")) { + tool = value; + if (value.includes(" ")) + tool = value.substring(value.indexOf(" ") + 1); + _settings__WEBPACK_IMPORTED_MODULE_0__.executeDevTools(tool); + return [2 /*return*/]; + } + else if (value.toLowerCase().includes("suggest")) { + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.suggested(); + return [2 /*return*/]; + } + // Setup the loopRunnign, lookup value, and if there is a second assignment then lets add them both + searchResult = true; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.toggle.searchText(); + lookup = [value]; + if (value.includes("|")) { + lookup[0] = value.substring(0, value.indexOf("|")); + lookup[1] = value.substring(value.indexOf("|") + 1); + } + tasks = []; + _a = lookup; + _b = []; + for (_c in _a) + _b.push(_c); + _i = 0; + _d.label = 1; + case 1: + if (!(_i < _b.length)) return [3 /*break*/, 4]; + _c = _b[_i]; + if (!(_c in _a)) return [3 /*break*/, 3]; + a = _c; + return [4 /*yield*/, searchAlgo.lookup(lookup[a], lookup.length > 1)]; + case 2: + data = _d.sent(); + if (!data) + return [2 /*return*/]; + // Setup the data for tasks + console.log("Search for (Reaper/Slayer Assignment, Alias, or Creature): " + data.task); + tasks.push({ name: data.task, reaper: data.reaper }); + _d.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + if (!(tasks.length > 1)) return [3 /*break*/, 6]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.double({ name: tasks[0].name, count: 1 }, { name: tasks[1].name, count: 1 })]; + case 5: + _d.sent(); + return [3 /*break*/, 10]; + case 6: + if (!(tasks.length == 1 && tasks[0].reaper)) return [3 /*break*/, 8]; + return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.reaper({ name: tasks[0].name, count: 1 })]; + case 7: + _d.sent(); + return [3 /*break*/, 10]; + case 8: return [4 /*yield*/, _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.set.single({ name: tasks[0].name, count: 1 })]; + case 9: + _d.sent(); + _d.label = 10; + case 10: + // Stop loading + _dochandler__WEBPACK_IMPORTED_MODULE_1__.animate.loadingStop(); + if (!!_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.search) return [3 /*break*/, 12]; + return [4 /*yield*/, timer(_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.searchTimer)]; + case 11: + _d.sent(); + searchResult = false; + _dochandler__WEBPACK_IMPORTED_MODULE_1__.main.toggle.searchText(); + _d.label = 12; + case 12: return [2 /*return*/]; + } + }); + }); +} + + +/***/ }), + +/***/ "./fonts/aa_10px_mono.fontmeta.json": +/*!******************************************!*\ + !*** ./fonts/aa_10px_mono.fontmeta.json ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +module.exports = __webpack_require__.p + "aa_10px_mono.fontmeta.json"; + +/***/ }), + +/***/ "./fonts/aa_8px_mono.fontmeta.json": +/*!*****************************************!*\ + !*** ./fonts/aa_8px_mono.fontmeta.json ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +module.exports = __webpack_require__.p + "aa_8px_mono.fontmeta.json"; + +/***/ }), + +/***/ "canvas": +/*!*************************!*\ + !*** external "canvas" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +if(typeof __WEBPACK_EXTERNAL_MODULE_canvas__ === 'undefined') { var e = new Error("Cannot find module 'canvas'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_canvas__; + +/***/ }), + +/***/ "electron/common": +/*!**********************************!*\ + !*** external "electron/common" ***! + \**********************************/ +/***/ ((module) => { + +"use strict"; +if(typeof __WEBPACK_EXTERNAL_MODULE_electron_common__ === 'undefined') { var e = new Error("Cannot find module 'electron/common'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_electron_common__; + +/***/ }), + +/***/ "sharp": +/*!************************!*\ + !*** external "sharp" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +if(typeof __WEBPACK_EXTERNAL_MODULE_sharp__ === 'undefined') { var e = new Error("Cannot find module 'sharp'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_sharp__; + +/***/ }), + +/***/ "../node_modules/alt1/dist/base/index.js": +/*!***********************************************!*\ + !*** ../node_modules/alt1/dist/base/index.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory((function webpackLoadOptionalExternalModule() { try { return __webpack_require__(/*! sharp */ "sharp"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return __webpack_require__(/*! canvas */ "canvas"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return __webpack_require__(/*! electron/common */ "electron/common"); } catch(e) {} }())); + else {} +})(globalThis, (__WEBPACK_EXTERNAL_MODULE_sharp__, __WEBPACK_EXTERNAL_MODULE_canvas__, __WEBPACK_EXTERNAL_MODULE_electron_common__) => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/base/alt1api.ts": +/*!*****************************!*\ + !*** ./src/base/alt1api.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "./src/base/declarations.ts": +/*!**********************************!*\ + !*** ./src/base/declarations.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "./src/base/imagedata-extensions.ts": +/*!******************************************!*\ + !*** ./src/base/imagedata-extensions.ts ***! + \******************************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_2062__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImageData = void 0; +const a1lib = __importStar(__nested_webpack_require_2062__(/*! ./index */ "./src/base/index.ts")); +const nodeimports = __importStar(__nested_webpack_require_2062__(/*! ./nodepolyfill */ "./src/base/nodepolyfill.ts")); +// //TODO revamp this madness a bit? +// (function () { +// var globalvar = (typeof self != "undefined" ? self : (typeof (global as any) != "undefined" ? (global as any) : null)) as any; +// //use the node-canvas version when on node +// if (typeof globalvar.ImageData == "undefined") { +// let nodecnv = requireNodeCanvas(); +// globalvar.ImageData = nodecnv.ImageData; +// } +// var fill = typeof globalvar.ImageData == "undefined"; +// //should never be reach anymore +// var constr = function (this: any) { +// var i = 0; +// var data = (arguments[i] instanceof Uint8ClampedArray ? arguments[i++] : null); +// var width = arguments[i++]; +// var height = arguments[i++]; +// if (fill) { +// if (!data) { data = new Uint8ClampedArray(width * height * 4); } +// this.width = width; +// this.height = height; +// this.data = data; +// } +// else if (oldconstr) { +// return (data ? new oldconstr(data, width, height) : new oldconstr(width, height)); +// } else { +// var canvas = document.createElement('canvas'); +// canvas.width = width; +// canvas.height = height; +// var ctx = canvas.getContext("2d")!; +// var imageData = ctx.createImageData(width, height); +// if (data) { imageData.data.set(data); } +// return imageData; +// } +// } +// var oldconstr = globalvar.ImageData; +// if (typeof document != "undefined") { +// try { +// new oldconstr(1, 1); +// } catch (e) { +// //direct constructor call not allowed in ie +// oldconstr = null; +// } +// } +// if (!fill) { constr.prototype = globalvar.ImageData.prototype; } +// globalvar.ImageData = constr; +// ImageData = constr as any; +// })(); +(function () { + var globalvar = (typeof self != "undefined" ? self : (typeof __nested_webpack_require_2062__.g != "undefined" ? __nested_webpack_require_2062__.g : null)); + var filltype = typeof globalvar.ImageData == "undefined" || typeof globalvar.document == "undefined"; + var fillconstr = filltype; + if (!filltype) { + var oldconstr = globalvar.ImageData; + try { + let data = new Uint8ClampedArray(4); + data[0] = 1; + let a = new globalvar.ImageData(data, 1, 1); + fillconstr = a.data[0] != 1; + } + catch (e) { + fillconstr = true; + } + } + if (fillconstr) { + var constr = function ImageDataShim() { + var i = 0; + var data = (arguments[i] instanceof Uint8ClampedArray ? arguments[i++] : null); + var width = arguments[i++]; + var height = arguments[i++]; + if (filltype) { + if (!data) { + data = new Uint8ClampedArray(width * height * 4); + } + this.width = width; + this.height = height; + this.data = data; + } + else if (fillconstr) { + //WARNING This branch of code does not use the same pixel data backing store + //(problem with wasm, however all wasm browser have a native constructor (unless asm.js is used)) + var canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + var ctx = canvas.getContext("2d"); + var imageData = ctx.createImageData(width, height); + if (data) { + imageData.data.set(data); + } + return imageData; + } + // else { + // //oh no... + // //we need this monstrocity in order to call the native constructor with variable number of args + // //when es5 transpile is enable (that strips the spread operator) + // return new (Function.prototype.bind.apply(oldconstr, [null,...arguments])); + // } + }; + if (!filltype) { + constr.prototype = globalvar.ImageData.prototype; + } + globalvar.ImageData = constr; + exports.ImageData = constr; + } + else { + exports.ImageData = globalvar.ImageData; + } +})(); +//Recast into a drawable imagedata class on all platforms, into a normal browser ImageData on browsers or a node-canvas imagedata on nodejs +exports.ImageData.prototype.toDrawableData = function () { + if (typeof document == "undefined") { + return nodeimports.imageDataToDrawable(this); + } + else { + return this; + } +}; +exports.ImageData.prototype.putImageData = function (buf, cx, cy) { + for (var dx = 0; dx < buf.width; dx++) { + for (var dy = 0; dy < buf.height; dy++) { + var i1 = (dx + cx) * 4 + (dy + cy) * 4 * this.width; + var i2 = dx * 4 + dy * 4 * buf.width; + this.data[i1] = buf.data[i2]; + this.data[i1 + 1] = buf.data[i2 + 1]; + this.data[i1 + 2] = buf.data[i2 + 2]; + this.data[i1 + 3] = buf.data[i2 + 3]; + } + } +}; +exports.ImageData.prototype.pixelOffset = function (x, y) { + return x * 4 + y * this.width * 4; +}; +//creates a hash of a portion of the buffer used to check for changes +exports.ImageData.prototype.getPixelHash = function (rect) { + if (!rect) { + rect = new a1lib.Rect(0, 0, this.width, this.height); + } + var hash = 0; + for (var x = rect.x; x < rect.x + rect.width; x++) { + for (var y = rect.y; y < rect.y + rect.height; y++) { + var i = x * 4 + y * 4 * this.width; + hash = (((hash << 5) - hash) + this.data[i]) | 0; + hash = (((hash << 5) - hash) + this.data[i + 1]) | 0; + hash = (((hash << 5) - hash) + this.data[i + 2]) | 0; + hash = (((hash << 5) - hash) + this.data[i + 3]) | 0; + } + } + return hash; +}; +exports.ImageData.prototype.clone = function (rect) { + return this.toImage(rect).getContext("2d").getImageData(0, 0, rect.width, rect.height); +}; +exports.ImageData.prototype.show = function (x = 5, y = 5, zoom = 1) { + if (typeof document == "undefined") { + console.error("need a document to show an imagedata object"); + return; + } + var imgs = document.getElementsByClassName("debugimage"); + while (imgs.length > exports.ImageData.prototype.show.maxImages) { + imgs[0].remove(); + } + var el = this.toImage(); + el.classList.add("debugimage"); + el.style.position = "absolute"; + el.style.zIndex = "1000"; + el.style.left = x / zoom + "px"; + el.style.top = y / zoom + "px"; + el.style.background = "purple"; + el.style.cursor = "pointer"; + el.style.imageRendering = "pixelated"; + el.style.outline = "1px solid #0f0"; + el.style.width = (this.width == 1 ? 100 : this.width) * zoom + "px"; + el.style.height = (this.height == 1 ? 100 : this.height) * zoom + "px"; + el.onclick = function () { el.remove(); }; + document.body.appendChild(el); + return el; +}; +exports.ImageData.prototype.show.maxImages = 10; +exports.ImageData.prototype.toImage = function (rect) { + if (!rect) { + rect = new a1lib.Rect(0, 0, this.width, this.height); + } + if (typeof document != "undefined") { + var el = document.createElement("canvas"); + el.width = rect.width; + el.height = rect.height; + } + else { + el = nodeimports.createCanvas(rect.width, rect.height); + } + var ctx = el.getContext("2d"); + ctx.putImageData(this.toDrawableData(), -rect.x, -rect.y); + return el; +}; +exports.ImageData.prototype.getPixel = function (x, y) { + var i = x * 4 + y * 4 * this.width; + return [this.data[i], this.data[i + 1], this.data[i + 2], this.data[i + 3]]; +}; +exports.ImageData.prototype.getPixelValueSum = function (x, y) { + var i = x * 4 + y * 4 * this.width; + return this.data[i] + this.data[i + 1] + this.data[i + 2]; +}; +exports.ImageData.prototype.getPixelInt = function (x, y) { + var i = x * 4 + y * 4 * this.width; + return (this.data[i + 3] << 24) + (this.data[i + 0] << 16) + (this.data[i + 1] << 8) + (this.data[i + 2] << 0); +}; +exports.ImageData.prototype.getColorDifference = function (x, y, r, g, b, a = 255) { + var i = x * 4 + y * 4 * this.width; + return Math.abs(this.data[i] - r) + Math.abs(this.data[i + 1] - g) + Math.abs(this.data[i + 2] - b) * a / 255; +}; +exports.ImageData.prototype.setPixel = function (x, y, ...color) { + var r, g, b, a; + var [r, g, b, a] = (Array.isArray(color[0]) ? color[0] : color); + var i = x * 4 + y * 4 * this.width; + this.data[i] = r; + this.data[i + 1] = g; + this.data[i + 2] = b; + this.data[i + 3] = a == undefined ? 255 : a; +}; +exports.ImageData.prototype.setPixelInt = function (x, y, color) { + var i = x * 4 + y * 4 * this.width; + this.data[i] = (color >> 24) & 0xff; + this.data[i + 1] = (color >> 16) & 0xff; + this.data[i + 2] = (color >> 8) & 0xff; + this.data[i + 3] = (color >> 0) & 0xff; +}; +exports.ImageData.prototype.toFileBytes = function (format, quality) { + if (typeof HTMLCanvasElement != "undefined") { + return new Promise(d => this.toImage().toBlob(b => { + var r = new FileReader(); + r.readAsArrayBuffer(b); + r.onload = () => d(new Uint8Array(r.result)); + }, format, quality)); + } + else { + return nodeimports.imageDataToFileBytes(this, format, quality); + } +}; +exports.ImageData.prototype.toPngBase64 = function () { + if (typeof HTMLCanvasElement != "undefined") { + var str = this.toImage().toDataURL("image/png"); + return str.slice(str.indexOf(",") + 1); + } + else { + throw new Error("synchronous image conversion not supported in nodejs, try using ImageData.prototype.toFileBytes"); + } +}; +exports.ImageData.prototype.pixelCompare = function (buf, x = 0, y = 0, max) { + return a1lib.ImageDetect.simpleCompare(this, buf, x, y, max); +}; +exports.ImageData.prototype.copyTo = function (target, sourcex, sourcey, width, height, targetx, targety) { + //convince v8 that these are 31bit uints + const targetwidth = target.width | 0; + const thiswidth = this.width | 0; + const copywidth = width | 0; + const fastwidth = Math.floor(width / 4) * 4; + const thisdata = new Int32Array(this.data.buffer, this.data.byteOffset, this.data.byteLength / 4); + const targetdata = new Int32Array(target.data.buffer, target.data.byteOffset, target.data.byteLength / 4); + for (let cy = 0; cy < height; cy++) { + let cx = 0; + let it = (cx + targetx) + (cy + targety) * targetwidth; + let is = (cx + sourcex) + (cy + sourcey) * thiswidth; + //copy 4 pixels per iter (xmm) + for (; cx < fastwidth; cx += 4) { + targetdata[it] = thisdata[is]; + targetdata[it + 1] = thisdata[is + 1]; + targetdata[it + 2] = thisdata[is + 2]; + targetdata[it + 3] = thisdata[is + 3]; + it += 4; + is += 4; + } + //copy remainder per pixel + for (; cx < copywidth; cx++) { + targetdata[it] = thisdata[is]; + it += 1; + is += 1; + } + } +}; +if (typeof HTMLImageElement != "undefined") { + HTMLImageElement.prototype.toBuffer = function (x = 0, y = 0, w = this.width, h = this.height) { + var cnv = document.createElement("canvas"); + cnv.width = w; + cnv.height = h; + var ctx = cnv.getContext("2d"); + ctx.drawImage(this, -x, -y); + return ctx.getImageData(0, 0, w, h); + }; + HTMLImageElement.prototype.toCanvas = function (x = 0, y = 0, w = this.width, h = this.height) { + var cnv = document.createElement("canvas"); + cnv.width = w; + cnv.height = h; + var ctx = cnv.getContext("2d"); + ctx.drawImage(this, -x, -y); + return cnv; + }; +} + + +/***/ }), + +/***/ "./src/base/imagedetect.ts": +/*!*********************************!*\ + !*** ./src/base/imagedetect.ts ***! + \*********************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_15248__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImageDataSet = exports.webpackImages = exports.asyncMap = exports.coldif = exports.simpleCompareRMSE = exports.simpleCompare = exports.findSubbuffer = exports.findSubimage = exports.clearPngColorspace = exports.isPngBuffer = exports.imageDataFromFileBuffer = exports.imageDataFromBase64 = exports.imageDataFromUrl = void 0; +const imgref_1 = __nested_webpack_require_15248__(/*! ./imgref */ "./src/base/imgref.ts"); +const wapper = __importStar(__nested_webpack_require_15248__(/*! ./wrapper */ "./src/base/wrapper.ts")); +const nodeimports = __importStar(__nested_webpack_require_15248__(/*! ./nodepolyfill */ "./src/base/nodepolyfill.ts")); +const _1 = __nested_webpack_require_15248__(/*! . */ "./src/base/index.ts"); +/** +* Downloads an image and returns the ImageData +* Make sure the png image does not have a sRGB chunk or the resulting pixels will differ for different users!!! +* @param url http(s) or data url to the image +*/ +async function imageDataFromUrl(url) { + if (typeof Image != "undefined") { + var img = new Image(); + img.crossOrigin = "crossorigin"; + return await new Promise((done, fail) => { + img.onload = function () { done(img.toBuffer()); }; + img.onerror = fail; + img.src = url; + }); + } + else { + var hdr = "data:image/png;base64,"; + if (url.startsWith(hdr)) { + return imageDataFromBase64(url.slice(hdr.length)); + } + throw new Error("loading remote images in nodejs has been disabled, load the raw bytes and use imageDataFromNodeBuffer instead"); + } +} +exports.imageDataFromUrl = imageDataFromUrl; +/** +* Loads an ImageData object from a base64 encoded png image +* Make sure the png image does not have a sRGB chunk or the resulting pixels will differ for different users!!! +* @param data a base64 encoded png image +*/ +async function imageDataFromBase64(data) { + if (typeof Image != "undefined") { + return imageDataFromUrl("data:image/png;base64," + data); + } + else { + return nodeimports.imageDataFromBase64(data); + } +} +exports.imageDataFromBase64 = imageDataFromBase64; +/** + * Loads an ImageData object directly from a png encoded file buffer + * This method ensures that png color space headers are taken care off + * @param data The bytes of a png file + */ +async function imageDataFromFileBuffer(data) { + clearPngColorspace(data); + if (typeof Image != "undefined") { + let blob = new Blob([data], { type: "image/png" }); + let url = URL.createObjectURL(blob); + let r = await imageDataFromUrl(url); + URL.revokeObjectURL(url); + return r; + } + else { + return nodeimports.imageDataFromBuffer(data); + } +} +exports.imageDataFromFileBuffer = imageDataFromFileBuffer; +/** +* Checks if a given byte array is a png file (by checking for ?PNG as first 4 bytes) +* @param bytes Raw bytes of the png file +*/ +function isPngBuffer(bytes) { + return bytes[0] == 137 && bytes[1] == 80 && bytes[2] == 78 && bytes[3] == 71; +} +exports.isPngBuffer = isPngBuffer; +/** +* Resets the colorspace data in the png file. +* This makes sure the browser renders the exact colors in the file instead of filtering it in order to obtain the best real life representation of +* what it looked like on the authors screen. (this feature is often broken and not supported) +* For example a round trip printscreen -> open in browser results in different colors than the original +* @param data Raw bytes of the png file +*/ +function clearPngColorspace(data) { + if (!isPngBuffer(data)) { + throw new Error("non-png image received"); + } + var i = 8; + while (i < data.length) { + var length = data[i++] * 0x1000000 + data[i++] * 0x10000 + data[i++] * 0x100 + data[i++]; + var ancillary = !!((data[i] >> 5) & 1); + var chunkname = String.fromCharCode(data[i], data[i + 1], data[i + 2], data[i + 3]); + var chunkid = chunkname.toLowerCase(); + if (chunkid != "trns" && ancillary) { + data[i + 0] = "n".charCodeAt(0); + data[i + 1] = "o".charCodeAt(0); + data[i + 2] = "P".charCodeAt(0); + data[i + 3] = "E".charCodeAt(0); + //calculate new chunk checksum + //http://www.libpng.org/pub/png/spec/1.2/PNG-CRCAppendix.html + var end = i + 4 + length; + var crc = 0xffffffff; + //should be fast enough like this + var bitcrc = function (bit) { + for (var k = 0; k < 8; k++) { + if (bit & 1) { + bit = 0xedb88320 ^ (bit >>> 1); + } + else { + bit = bit >>> 1; + } + } + return bit; + }; + for (var a = i; a < end; a++) { + if (a >= i + 4) { + data[a] = 0; + } + var bit = data[a]; + crc = bitcrc((crc ^ bit) & 0xff) ^ (crc >>> 8); + } + crc = crc ^ 0xffffffff; + //new chunk checksum + data[i + 4 + length + 0] = (crc >> 24) & 0xff; + data[i + 4 + length + 1] = (crc >> 16) & 0xff; + data[i + 4 + length + 2] = (crc >> 8) & 0xff; + data[i + 4 + length + 3] = (crc >> 0) & 0xff; + } + if (chunkname == "IEND") { + break; + } + i += 4; //type + i += length; //data + i += 4; //crc + } +} +exports.clearPngColorspace = clearPngColorspace; +/** +* finds the given needle ImageBuffer in the given haystack ImgRef this function uses the best optimized available +* code depending on the type of the haystack. It will use fast c# searching if the haystack is an ImgRefBind, js searching +* is used otherwise. +* the checklist argument is no longer used and should ignored or null/undefined +* The optional sx,sy,sw,sh arguments indicate a bounding rectangle in which to search the needle. The rectangle should be bigger than the needle +* @returns An array of points where the needle is found. The array is empty if none are found +*/ +function findSubimage(haystackImgref, needleBuffer, sx = 0, sy = 0, sw = haystackImgref.width, sh = haystackImgref.height) { + if (!haystackImgref) { + throw new TypeError(); + } + if (!needleBuffer) { + throw new TypeError(); + } + var max = 30; + //check if we can do this in alt1 + if (haystackImgref instanceof imgref_1.ImgRefBind && wapper.hasAlt1 && alt1.bindFindSubImg) { + var needlestr = wapper.encodeImageString(needleBuffer); + var r = alt1.bindFindSubImg(haystackImgref.handle, needlestr, needleBuffer.width, sx, sy, sw, sh); + if (!r) { + throw new wapper.Alt1Error(); + } + return JSON.parse(r); + } + return findSubbuffer(haystackImgref.read(), needleBuffer, sx, sy, sw, sh); +} +exports.findSubimage = findSubimage; +/** +* Uses js to find the given needle ImageBuffer in the given haystack ImageBuffer. It is better to use the alt1.bind- functions in +* combination with a1nxt.findsubimg. +* the optional sx,sy,sw,sh arguments indicate a bounding rectangle in which to search. +* @returns An array of points where the needle is found. The array is empty if none are found +*/ +function findSubbuffer(haystack, needle, sx = 0, sy = 0, sw = haystack.width, sh = haystack.height) { + var r = []; + var maxdif = 30; + var maxresults = 50; + var needlestride = needle.width * 4; + var heystackstride = haystack.width * 4; + //built list of non trans pixel to check + var checkList = []; + for (var y = 0; y < needle.height; y++) { + for (var x = 0; x < needle.width; x++) { + var i = x * 4 + y * needlestride; + if (needle.data[i + 3] == 255) { + checkList.push({ x: x, y: y }); + } + if (checkList.length == 10) { + break; + } + } + if (checkList.length == 10) { + break; + } + } + var cw = (sx + sw) - needle.width; + var ch = (sy + sh) - needle.height; + var checklength = checkList.length; + for (var y = sy; y <= ch; y++) { + outer: for (var x = sx; x <= cw; x++) { + for (var a = 0; a < checklength; a++) { + var i1 = (x + checkList[a].x) * 4 + (y + checkList[a].y) * heystackstride; + var i2 = checkList[a].x * 4 + checkList[a].y * needlestride; + var d = 0; + d = d + Math.abs(haystack.data[i1 + 0] - needle.data[i2 + 0]) | 0; + d = d + Math.abs(haystack.data[i1 + 1] - needle.data[i2 + 1]) | 0; + d = d + Math.abs(haystack.data[i1 + 2] - needle.data[i2 + 2]) | 0; + d *= 255 / needle.data[i2 + 3]; + if (d > maxdif) { + continue outer; + } + } + if (simpleCompare(haystack, needle, x, y, maxdif) != Infinity) { + r.push({ x, y }); + if (r.length > maxresults) { + return r; + } + } + } + } + return r; +} +exports.findSubbuffer = findSubbuffer; +/** +* Compares two images and returns the average color difference per pixel between them +* @param max The max color difference at any point in the image before short circuiting the function and returning Infinity. set to -1 to always continue. +* @returns The average color difference per pixel or Infinity if the difference is more than max at any point in the image +*/ +function simpleCompare(bigbuf, checkbuf, x, y, max = 30) { + if (x < 0 || y < 0) { + throw new RangeError(); + } + if (x + checkbuf.width > bigbuf.width || y + checkbuf.height > bigbuf.height) { + throw new RangeError(); + } + if (max == -1) { + max = 255 * 4; + } + var dif = 0; + for (var step = 8; step >= 1; step /= 2) { + for (var cx = 0; cx < checkbuf.width; cx += step) { + for (var cy = 0; cy < checkbuf.height; cy += step) { + var i1 = (x + cx) * 4 + (y + cy) * bigbuf.width * 4; + var i2 = cx * 4 + cy * checkbuf.width * 4; + var d = 0; + d = d + Math.abs(bigbuf.data[i1 + 0] - checkbuf.data[i2 + 0]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 1] - checkbuf.data[i2 + 1]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 2] - checkbuf.data[i2 + 2]) | 0; + d *= checkbuf.data[i2 + 3] / 255; + if (step == 1) { + dif += d; + } + if (d > max) { + return Infinity; + } + } + } + } + return dif / checkbuf.width / checkbuf.height; +} +exports.simpleCompare = simpleCompare; +/** +* Calculates the root mean square error between the two buffers at the given coordinate, this method can be used in situations with significant blur or +* transparency, it does not bail early on non-matching images like simpleCompare does so it can be expected to be much slower when called often. +* @returns The root mean square error beteen the images, high single pixel errors are penalized more than consisten low errors. return of 0 means perfect match. +*/ +function simpleCompareRMSE(bigbuf, checkbuf, x, y) { + if (x < 0 || y < 0) { + throw new RangeError(); + } + if (x + checkbuf.width > bigbuf.width || y + checkbuf.height > bigbuf.height) { + throw new RangeError(); + } + var dif = 0; + var numpix = 0; + for (var cx = 0; cx < checkbuf.width; cx++) { + for (var cy = 0; cy < checkbuf.height; cy++) { + var i1 = (x + cx) * 4 + (y + cy) * bigbuf.width * 4; + var i2 = cx * 4 + cy * checkbuf.width * 4; + var d = 0; + d = d + Math.abs(bigbuf.data[i1 + 0] - checkbuf.data[i2 + 0]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 1] - checkbuf.data[i2 + 1]) | 0; + d = d + Math.abs(bigbuf.data[i1 + 2] - checkbuf.data[i2 + 2]) | 0; + var weight = checkbuf.data[i2 + 3] / 255; + numpix += weight; + dif += d * d * weight; + } + } + return Math.sqrt(dif / numpix); +} +exports.simpleCompareRMSE = simpleCompareRMSE; +/** +* Returns the difference between two colors (scaled to the alpha of the second color) +*/ +function coldif(r1, g1, b1, r2, g2, b2, a2) { + return (Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2)) * a2 / 255; //only applies alpha for 2nd buffer! +} +exports.coldif = coldif; +/** + * Turns map of promises into a map that contains the resolved values after loading. + * @param input + */ +function asyncMap(input) { + var raw = {}; + var promises = []; + for (var a in input) { + if (input.hasOwnProperty(a)) { + raw[a] = null; + promises.push(input[a].then(function (a, i) { raw[a] = i; r[a] = i; }.bind(null, a))); + } + } + var r = {}; + var promise = Promise.all(promises).then(() => { r.loaded = true; return r; }); + Object.defineProperty(r, "loaded", { enumerable: false, value: false, writable: true }); + Object.defineProperty(r, "promise", { enumerable: false, value: promise }); + Object.defineProperty(r, "raw", { enumerable: false, value: raw }); + return Object.assign(r, raw); +} +exports.asyncMap = asyncMap; +/** +* Same as asyncMap, but casts the properties to ImageData in typescript +*/ +function webpackImages(input) { + return asyncMap(input); +} +exports.webpackImages = webpackImages; +class ImageDataSet { + constructor() { + this.buffers = []; + } + matchBest(img, x, y, max) { + let best = null; + let bestscore = max; + for (let a = 0; a < this.buffers.length; a++) { + let score = img.pixelCompare(this.buffers[a], x, y, bestscore); + if (isFinite(score) && (bestscore == undefined || score < bestscore)) { + bestscore = score; + best = a; + } + } + if (best == null) { + return null; + } + return { index: best, score: bestscore }; + } + static fromFilmStrip(baseimg, width) { + if ((baseimg.width % width) != 0) { + throw new Error("slice size does not fit in base img"); + } + let r = new ImageDataSet(); + for (let x = 0; x < baseimg.width; x += width) { + r.buffers.push(baseimg.clone(new _1.Rect(x, 0, width, baseimg.height))); + } + return r; + } + static fromFilmStripUneven(baseimg, widths) { + let r = new ImageDataSet(); + let x = 0; + for (let w of widths) { + r.buffers.push(baseimg.clone(new _1.Rect(x, 0, w, baseimg.height))); + x += w; + if (x > baseimg.width) { + throw new Error("sampling filmstrip outside bounds"); + } + } + if (x != baseimg.width) { + throw new Error("unconsumed pixels left in film strip imagedata"); + } + return r; + } + static fromAtlas(baseimg, slices) { + let r = new ImageDataSet(); + for (let slice of slices) { + r.buffers.push(baseimg.clone(slice)); + } + return r; + } +} +exports.ImageDataSet = ImageDataSet; + + +/***/ }), + +/***/ "./src/base/imgref.ts": +/*!****************************!*\ + !*** ./src/base/imgref.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, exports, __nested_webpack_require_31629__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImgRefData = exports.ImgRefBind = exports.ImgRefCtx = exports.ImgRef = void 0; +const index_1 = __nested_webpack_require_31629__(/*! ./index */ "./src/base/index.ts"); +/** + * Represents an image that might be in different types of memory + * This is mostly used to represent images still in Alt1 memory that have + * not been transfered to js yet. Various a1lib api's use this type and + * choose the most efficient approach based on the memory type + */ +class ImgRef { + constructor(x, y, w, h) { + this.t = "none"; + this.x = x; + this.y = y; + this.width = w; + this.height = h; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + throw new Error("This imgref (" + this.t + ") does not support toData"); + } + findSubimage(needle, sx = 0, sy = 0, w = this.width, h = this.height) { + return index_1.ImageDetect.findSubimage(this, needle, sx, sy, w, h); + } + toData(x = this.x, y = this.y, w = this.width, h = this.height) { + return this.read(x - this.x, y - this.y, w, h); + } + ; + containsArea(rect) { + return this.x <= rect.x && this.y <= rect.y && this.x + this.width >= rect.x + rect.width && this.y + this.height >= rect.y + rect.height; + } +} +exports.ImgRef = ImgRef; +/** + * Represents an image in js render memory (canvas/image tag) + */ +class ImgRefCtx extends ImgRef { + constructor(img, x = 0, y = 0) { + if (img instanceof CanvasRenderingContext2D) { + super(x, y, img.canvas.width, img.canvas.height); + this.ctx = img; + } + else { + super(x, y, img.width, img.height); + var cnv = (img instanceof HTMLCanvasElement ? img : img.toCanvas()); + this.ctx = cnv.getContext("2d"); + } + this.t = "ctx"; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + return this.ctx.getImageData(x, y, w, h); + } +} +exports.ImgRefCtx = ImgRefCtx; +/** + * Represents in image in Alt1 memory, This type of image can be searched for subimages + * very efficiently and transfering the full image to js can be avoided this way + */ +class ImgRefBind extends ImgRef { + constructor(handle, x = 0, y = 0, w = 0, h = 0) { + super(x, y, w, h); + this.handle = handle; + this.t = "bind"; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + return (0, index_1.transferImageData)(this.handle, x, y, w, h); + } +} +exports.ImgRefBind = ImgRefBind; +/** + * Represents an image in js memory + */ +class ImgRefData extends ImgRef { + constructor(buf, x = 0, y = 0) { + super(x, y, buf.width, buf.height); + this.buf = buf; + this.t = "data"; + } + read(x = 0, y = 0, w = this.width, h = this.height) { + if (x == 0 && y == 0 && w == this.width && h == this.height) { + return this.buf; + } + var r = new ImageData(w, h); + for (var b = y; b < y + h; b++) { + for (var a = x; a < x + w; a++) { + var i1 = (a - x) * 4 + (b - y) * w * 4; + var i2 = a * 4 + b * 4 * this.buf.width; + r.data[i1] = this.buf.data[i2]; + r.data[i1 + 1] = this.buf.data[i2 + 1]; + r.data[i1 + 2] = this.buf.data[i2 + 2]; + r.data[i1 + 3] = this.buf.data[i2 + 3]; + } + } + return r; + } +} +exports.ImgRefData = ImgRefData; + + +/***/ }), + +/***/ "./src/base/index.ts": +/*!***************************!*\ + !*** ./src/base/index.ts ***! + \***************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_35283__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ImageDataSet = exports.findSubbuffer = exports.simpleCompare = exports.findSubimage = exports.webpackImages = exports.NodePolyfill = exports.ImageData = exports.Rect = exports.PasteInput = exports.ImageDetect = void 0; +__nested_webpack_require_35283__(/*! ./declarations */ "./src/base/declarations.ts"); +exports.ImageDetect = __importStar(__nested_webpack_require_35283__(/*! ./imagedetect */ "./src/base/imagedetect.ts")); +exports.PasteInput = __importStar(__nested_webpack_require_35283__(/*! ./pasteinput */ "./src/base/pasteinput.ts")); +var rect_1 = __nested_webpack_require_35283__(/*! ./rect */ "./src/base/rect.ts"); +Object.defineProperty(exports, "Rect", ({ enumerable: true, get: function () { return __importDefault(rect_1).default; } })); +var imagedata_extensions_1 = __nested_webpack_require_35283__(/*! ./imagedata-extensions */ "./src/base/imagedata-extensions.ts"); +Object.defineProperty(exports, "ImageData", ({ enumerable: true, get: function () { return imagedata_extensions_1.ImageData; } })); +exports.NodePolyfill = __importStar(__nested_webpack_require_35283__(/*! ./nodepolyfill */ "./src/base/nodepolyfill.ts")); +__exportStar(__nested_webpack_require_35283__(/*! ./imgref */ "./src/base/imgref.ts"), exports); +__exportStar(__nested_webpack_require_35283__(/*! ./wrapper */ "./src/base/wrapper.ts"), exports); +var imagedetect_1 = __nested_webpack_require_35283__(/*! ./imagedetect */ "./src/base/imagedetect.ts"); +Object.defineProperty(exports, "webpackImages", ({ enumerable: true, get: function () { return imagedetect_1.webpackImages; } })); +Object.defineProperty(exports, "findSubimage", ({ enumerable: true, get: function () { return imagedetect_1.findSubimage; } })); +Object.defineProperty(exports, "simpleCompare", ({ enumerable: true, get: function () { return imagedetect_1.simpleCompare; } })); +Object.defineProperty(exports, "findSubbuffer", ({ enumerable: true, get: function () { return imagedetect_1.findSubbuffer; } })); +Object.defineProperty(exports, "ImageDataSet", ({ enumerable: true, get: function () { return imagedetect_1.ImageDataSet; } })); + + +/***/ }), + +/***/ "./src/base/nodepolyfill.ts": +/*!**********************************!*\ + !*** ./src/base/nodepolyfill.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports, __nested_webpack_require_38931__) => { + + +//nodejs and electron polyfills for web api's +//commented out type info as that breaks webpack with optional dependencies +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.imageDataFromBuffer = exports.imageDataFromBase64 = exports.imageDataToFileBytes = exports.createCanvas = exports.imageDataToDrawable = exports.requireElectronCommon = exports.requireNodeCanvas = exports.requireSharp = exports.polyfillRequire = void 0; +const index_1 = __nested_webpack_require_38931__(/*! ./index */ "./src/base/index.ts"); +const imagedetect_1 = __nested_webpack_require_38931__(/*! ./imagedetect */ "./src/base/imagedetect.ts"); +var requirefunction = null; +/** + * Call this function to let the libs require extra dependencies on nodejs in order + * to polyfill some browser api's (mostly image compression/decompression) + * `NodePolifill.polyfillRequire(require);` should solve most cases + */ +function polyfillRequire(requirefn) { + requirefunction = requirefn; +} +exports.polyfillRequire = polyfillRequire; +function requireSharp() { + try { + if (requirefunction) { + return requirefunction("sharp"); + } + else { + return __nested_webpack_require_38931__(/* webpackIgnore: true */ /*! sharp */ "sharp"); // as typeof import("sharp"); + } + } + catch (e) { } + return null; +} +exports.requireSharp = requireSharp; +function requireNodeCanvas() { + //attempt to require sharp first, after loading canvas the module sharp fails to load + requireSharp(); + try { + if (requirefunction) { + return requirefunction("canvas"); + } + else { + return __nested_webpack_require_38931__(/* webpackIgnore: true */ /*! canvas */ "canvas"); // as typeof import("sharp"); + } + } + catch (e) { } + return null; +} +exports.requireNodeCanvas = requireNodeCanvas; +function requireElectronCommon() { + try { + if (requirefunction) { + return requirefunction("electron/common"); + } + else { + return __nested_webpack_require_38931__(/* webpackIgnore: true */ /*! electron/common */ "electron/common"); + } + } + catch (e) { } + return null; +} +exports.requireElectronCommon = requireElectronCommon; +function imageDataToDrawable(buf) { + let nodecnv = requireNodeCanvas(); + if (!nodecnv) { + throw new Error("couldn't find built-in canvas or the module 'canvas'"); + } + return new nodecnv.ImageData(buf.data, buf.width, buf.height); +} +exports.imageDataToDrawable = imageDataToDrawable; +function createCanvas(w, h) { + let nodecnv = requireNodeCanvas(); + if (!nodecnv) { + throw new Error("couldn't find built-in canvas or the module 'canvas'"); + } + return nodecnv.createCanvas(w, h); +} +exports.createCanvas = createCanvas; +function flipBGRAtoRGBA(data) { + for (let i = 0; i < data.length; i += 4) { + let tmp = data[i + 2]; + data[i + 2] = data[i + 0]; + data[i + 0] = tmp; + } +} +async function imageDataToFileBytes(buf, format, quality) { + //use the electron API if we're in electron + var electronCommon; + var sharp; + if (electronCommon = requireElectronCommon()) { + let nativeImage = electronCommon.nativeImage; + //need to copy the buffer in order to flip it without destroying the original + let bufcpy = Buffer.from(buf.data.slice(buf.data.byteOffset, buf.data.byteLength)); + flipBGRAtoRGBA(bufcpy); + let nativeimg = nativeImage.createFromBitmap(bufcpy, { width: buf.width, height: buf.height }); + return nativeimg.toPNG(); + } + else if (sharp = requireSharp()) { + let img = sharp(Buffer.from(buf.data.buffer), { raw: { width: buf.width, height: buf.height, channels: 4 } }); + if (format == "image/png") { + img.png(); + } + else if (format == "image/webp") { + var opts = { quality: 80 }; + if (typeof quality == "number") { + opts.quality = quality * 100; + } + img.webp(opts); + } + else { + throw new Error("unknown image format: " + format); + } + return await img.toBuffer({ resolveWithObject: false }).buffer; + } + throw new Error("coulnd't find build-in image compression methods or the module 'electron/common' or 'sharp'"); +} +exports.imageDataToFileBytes = imageDataToFileBytes; +function imageDataFromBase64(base64) { + return imageDataFromBuffer(Buffer.from(base64, "base64")); +} +exports.imageDataFromBase64 = imageDataFromBase64; +async function imageDataFromBuffer(buffer) { + (0, imagedetect_1.clearPngColorspace)(buffer); + //use the electron API if we're in electron + var electronCommon; + var nodecnv; + if (electronCommon = requireElectronCommon()) { + let nativeImage = electronCommon.nativeImage; + let img = nativeImage.createFromBuffer(buffer); + let pixels = img.toBitmap(); + let size = img.getSize(); + let pixbuf = new Uint8ClampedArray(pixels.buffer, pixels.byteOffset, pixels.byteLength); + flipBGRAtoRGBA(pixbuf); + return new index_1.ImageData(pixbuf, size.width, size.height); + } + else if (nodecnv = requireNodeCanvas()) { + return new Promise((done, err) => { + let img = new nodecnv.Image(); + img.onerror = err; + img.onload = () => { + var cnv = nodecnv.createCanvas(img.naturalWidth, img.naturalHeight); + var ctx = cnv.getContext("2d"); + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, img.naturalWidth, img.naturalHeight); + //use our own class + done(new index_1.ImageData(data.data, data.width, data.height)); + }; + img.src = Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength); + }); + } + throw new Error("couldn't find built-in canvas, module 'electron/common' or the module 'canvas'"); +} +exports.imageDataFromBuffer = imageDataFromBuffer; + + +/***/ }), + +/***/ "./src/base/pasteinput.ts": +/*!********************************!*\ + !*** ./src/base/pasteinput.ts ***! + \********************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_45123__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.fileDialog = exports.start = exports.startDragNDrop = exports.triggerPaste = exports.unlisten = exports.listen = exports.lastref = void 0; +const index_1 = __nested_webpack_require_45123__(/*! ./index */ "./src/base/index.ts"); +const ImageDetect = __importStar(__nested_webpack_require_45123__(/*! ./imagedetect */ "./src/base/imagedetect.ts")); +var listeners = []; +var started = false; +var dndStarted = false; +var pasting = false; +exports.lastref = null; +function listen(func, errorfunc, dragndrop) { + listeners.push({ cb: func, error: errorfunc }); + if (!started) { + start(); + } + if (dragndrop && !dndStarted) { + startDragNDrop(); + } +} +exports.listen = listen; +function unlisten(func) { + let i = listeners.findIndex(c => c.cb == func); + if (i != -1) { + listeners.splice(i, 1); + } +} +exports.unlisten = unlisten; +/** + * currently used in multiple document situations (iframe), might be removed in the future + */ +function triggerPaste(img) { + exports.lastref = img; + for (var a in listeners) { + listeners[a].cb(exports.lastref); + } +} +exports.triggerPaste = triggerPaste; +function pasted(img) { + pasting = false; + let cnv = img instanceof HTMLCanvasElement ? img : img.toCanvas(); + triggerPaste(new index_1.ImgRefCtx(cnv)); +} +function error(error, mes) { + var _a, _b; + pasting = false; + for (var a in listeners) { + (_b = (_a = listeners[a]).error) === null || _b === void 0 ? void 0 : _b.call(_a, mes, error); + } +} +function startDragNDrop() { + var getitem = function (items) { + var foundimage = ""; + for (var a = 0; a < items.length; a++) { + var item = items[a]; + var m = item.type.match(/^image\/(\w+)$/); + if (m) { + if (m[1] == "png") { + return item; + } + else { + foundimage = m[1]; + } + } + } + if (foundimage) { + error("notpng", "The image you uploaded is not a .png image. Other image type have compression noise and can't be used for image detection."); + } + return null; + }; + window.addEventListener("dragover", function (e) { + e.preventDefault(); + }); + window.addEventListener("drop", function (e) { + if (!e.dataTransfer) { + return; + } + var item = getitem(e.dataTransfer.items); + e.preventDefault(); + if (!item) { + return; + } + fromFile(item.getAsFile()); + }); +} +exports.startDragNDrop = startDragNDrop; +function start() { + if (started) { + return; + } + started = true; + //determine if we have a clipboard api + //try{a=new Event("clipboard"); a="clipboardData" in a;} + //catch(e){a=false;} + var ischrome = !!navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match(/Edge/); + //old method breaks after chrome 41, revert to good old user agent sniffing + //nvm, internet explorer (edge) decided that it wants to be chrome, however fails at delivering + //turns out this one is interesting, edge is a hybrid between the paste api's + var apipasted = function (e) { + if (!e.clipboardData) { + return; + } + for (var a = 0; a < e.clipboardData.items.length; a++) { //loop all data types + if (e.clipboardData.items[a].type.indexOf("image") != -1) { + var file = e.clipboardData.items[a].getAsFile(); + if (file) { + var img = new Image(); + img.src = (window.URL || window.webkitURL).createObjectURL(file); + if (img.width > 0) { + pasted(img); + } + else { + img.onload = function () { pasted(img); }; + } + } + } + } + }; + if (ischrome) { + document.addEventListener("paste", apipasted); + } + else { + var catcher = document.createElement("div"); + catcher.setAttribute("contenteditable", ""); + catcher.className = "forcehidden"; //retarded ie safety/bug, cant apply styles using js//TODO i don't even know what's going on + catcher.onpaste = function (e) { + if (e.clipboardData && e.clipboardData.items) { + apipasted(e); + return; + } + setTimeout(function () { + var b = catcher.children[0]; + if (!b || b.tagName != "IMG") { + return; + } + var img = new Image(); + img.src = b.src; + var a = img.src.match(/^data:([\w\/]+);/); + if (img.width > 0) { + pasted(img); + } + else { + img.onload = function () { pasted(img); }; + } + catcher.innerHTML = ""; + }, 1); + }; + document.body.appendChild(catcher); + } + //detect if ctrl-v is pressed and focus catcher if needed + document.addEventListener("keydown", function (e) { + if (e.target.tagName == "INPUT") { + return; + } + if (e.keyCode != "V".charCodeAt(0) || !e.ctrlKey) { + return; + } + pasting = true; + setTimeout(function () { + if (pasting) { + error("noimg", "You pressed Ctrl+V, but no image was pasted by your browser, make sure your clipboard contains an image, and not a link to an image."); + } + }, 1000); + if (catcher) { + catcher.focus(); + } + }); +} +exports.start = start; +function fileDialog() { + var fileinput = document.createElement("input"); + fileinput.type = "file"; + fileinput.accept = "image/png"; + fileinput.onchange = function () { if (fileinput.files && fileinput.files[0]) { + fromFile(fileinput.files[0]); + } }; + fileinput.click(); + return fileinput; +} +exports.fileDialog = fileDialog; +function fromFile(file) { + if (!file) { + return; + } + var reader = new FileReader(); + reader.onload = function () { + var bytearray = new Uint8Array(reader.result); + if (ImageDetect.isPngBuffer(bytearray)) { + ImageDetect.clearPngColorspace(bytearray); + } + var blob = new Blob([bytearray], { type: "image/png" }); + var img = new Image(); + img.onerror = () => error("invalidfile", "The file you uploaded could not be opened as an image."); + var bloburl = URL.createObjectURL(blob); + img.src = bloburl; + if (img.width > 0) { + pasted(img); + URL.revokeObjectURL(bloburl); + } + else { + img.onload = function () { pasted(img); URL.revokeObjectURL(bloburl); }; + } + }; + reader.readAsArrayBuffer(file); +} + + +/***/ }), + +/***/ "./src/base/rect.ts": +/*!**************************!*\ + !*** ./src/base/rect.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, exports) => { + + +//util class for rectangle maths +//TODO shit this sucks can we remove it again? +//more of a shorthand to get {x,y,width,height} than a class +//kinda starting to like it again +//TODO remove rant +Object.defineProperty(exports, "__esModule", ({ value: true })); +; +/** + * Simple rectangle class with some util functions + */ +class Rect { + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.width = w; + this.height = h; + } + static fromArgs(...args) { + if (typeof args[0] == "object") { + return new Rect(args[0].x, args[0].y, args[0].width, args[0].height); + } + else if (typeof args[0] == "number" && args.length >= 4) { + return new Rect(args[0], args[1], args[2], args[3]); + } + else { + throw new Error("invalid rect args"); + } + } + /** + * Resizes this Rect to include the full size of a given second rectangle + */ + union(r2) { + var x = Math.min(this.x, r2.x); + var y = Math.min(this.y, r2.y); + this.width = Math.max(this.x + this.width, r2.x + r2.width) - x; + this.height = Math.max(this.y + this.height, r2.y + r2.height) - y; + this.x = x; + this.y = y; + return this; + } + /** + * Resizes this Rect to include a given point + */ + includePoint(x, y) { + this.union(new Rect(x, y, 0, 0)); + } + /** + * Grows the rectangle with the given dimensions + */ + inflate(w, h) { + this.x -= w; + this.y -= h; + this.width += 2 * w; + this.height += 2 * h; + } + /** + * Resizes this Rect to the area that overlaps a given Rect + * width and height will be set to 0 if the intersection does not exist + */ + intersect(r2) { + if (this.x < r2.x) { + this.width -= r2.x - this.x; + this.x = r2.x; + } + if (this.y < r2.y) { + this.height -= r2.y - this.y; + this.y = r2.y; + } + this.width = Math.min(this.x + this.width, r2.x + r2.width) - this.x; + this.height = Math.min(this.y + this.height, r2.y + r2.height) - this.y; + if (this.width <= 0 || this.height <= 0) { + this.width = 0; + this.height = 0; + } + } + /** + * Returns wether this Rect has at least one pixel overlap with a given Rect + */ + overlaps(r2) { + return this.x < r2.x + r2.width && this.x + this.width > r2.x && this.y < r2.y + r2.height && this.y + this.height > r2.y; + } + /** + * Returns wether a given Rect fits completely inside this Rect + * @param r2 + */ + contains(r2) { + return this.x <= r2.x && this.x + this.width >= r2.x + r2.width && this.y <= r2.y && this.y + this.height >= r2.y + r2.height; + } + /** + * Returns wether a given point lies inside this Rect + */ + containsPoint(x, y) { + return this.x <= x && this.x + this.width > x && this.y <= y && this.y + this.height > y; + } +} +exports["default"] = Rect; + + +/***/ }), + +/***/ "./src/base/wrapper.ts": +/*!*****************************!*\ + !*** ./src/base/wrapper.ts ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_56486__) { + + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.captureStream = exports.captureMultiAsync = exports.captureAsync = exports.ImageStreamReader = exports.once = exports.removeListener = exports.on = exports.addResizeElement = exports.getMousePosition = exports.hasAlt1Version = exports.resetEnvironment = exports.identifyApp = exports.unmixColor = exports.mixColor = exports.encodeImageString = exports.decodeImageString = exports.transferImageData = exports.captureHoldFullRs = exports.captureHoldScreen = exports.captureHold = exports.capture = exports.getdisplaybounds = exports.requireAlt1 = exports.openbrowser = exports.skinName = exports.hasAlt1 = exports.newestversion = exports.Alt1Error = exports.NoAlt1Error = void 0; +const rect_1 = __importDefault(__nested_webpack_require_56486__(/*! ./rect */ "./src/base/rect.ts")); +const imgref_1 = __nested_webpack_require_56486__(/*! ./imgref */ "./src/base/imgref.ts"); +const imagedata_extensions_1 = __nested_webpack_require_56486__(/*! ./imagedata-extensions */ "./src/base/imagedata-extensions.ts"); +__nested_webpack_require_56486__(/*! ./alt1api */ "./src/base/alt1api.ts"); +/** + * Thrown when a method is called that can not be used outside of Alt1 + */ +class NoAlt1Error extends Error { + constructor() { + super(); + this.message = "This method can not be ran outside of Alt1"; + } +} +exports.NoAlt1Error = NoAlt1Error; +; +/** + * Thrown when the Alt1 API returns an invalid result + * Errors of a different type are throw when internal Alt1 errors occur + */ +class Alt1Error extends Error { +} +exports.Alt1Error = Alt1Error; +/** + * The latest Alt1 version + */ +exports.newestversion = "1.5.5"; +/** + * Whether the Alt1 API is available + */ +exports.hasAlt1 = (typeof alt1 != "undefined"); +/** + * The name of the Alt1 interface skin. (Always "default" if running in a browser) + */ +exports.skinName = exports.hasAlt1 ? alt1.skinName : "default"; +/** + * Max number of bytes that can be sent by alt1 in one function + * Not completely sure why this number is different than window.alt1.maxtranfer + */ +var maxtransfer = 4000000; +/** + * Open a link in the default browser + * @deprecated use window.open instead + */ +function openbrowser(url) { + if (exports.hasAlt1) { + alt1.openBrowser(url); + } + else { + window.open(url, '_blank'); + } +} +exports.openbrowser = openbrowser; +/** + * Throw if Alt1 API is not available + */ +function requireAlt1() { + if (!exports.hasAlt1) { + throw new NoAlt1Error(); + } +} +exports.requireAlt1 = requireAlt1; +/** + * Returns an object with a rectangle that spans all screens + */ +function getdisplaybounds() { + if (!exports.hasAlt1) { + return false; + } + return new rect_1.default(alt1.screenX, alt1.screenY, alt1.screenWidth, alt1.screenHeight); +} +exports.getdisplaybounds = getdisplaybounds; +/** + * gets an imagebuffer with pixel data about the requested region + */ +function capture(...args) { + //TODO change null return on error into throw instead (x3) + if (!exports.hasAlt1) { + throw new NoAlt1Error(); + } + var rect = rect_1.default.fromArgs(...args); + if (alt1.capture) { + return new imagedata_extensions_1.ImageData(alt1.capture(rect.x, rect.y, rect.width, rect.height), rect.width, rect.height); + } + var buf = new imagedata_extensions_1.ImageData(rect.width, rect.height); + if (rect.width * rect.height * 4 <= maxtransfer) { + var data = alt1.getRegion(rect.x, rect.y, rect.width, rect.height); + if (!data) { + return null; + } + decodeImageString(data, buf, 0, 0, rect.width, rect.height); + } + else { + //split up the request to to exceed the single transfer limit (for now) + var x1 = rect.x; + var ref = alt1.bindRegion(rect.x, rect.y, rect.width, rect.height); + if (ref <= 0) { + return null; + } + while (x1 < rect.x + rect.width) { + var x2 = Math.min(rect.x + rect.width, Math.floor(x1 + (maxtransfer / 4 / rect.height))); + var data = alt1.bindGetRegion(ref, x1, rect.y, x2 - x1, rect.height); + if (!data) { + return null; + } + decodeImageString(data, buf, x1 - rect.x, 0, x2 - x1, rect.height); + x1 = x2; + } + } + return buf; +} +exports.capture = capture; +/** + * Makes alt1 bind an area of the rs client in memory without sending it to the js client + * returns an imgref object which can be used to get pixel data using the imgreftobuf function + * currently only one bind can exist per app and the ref in (v) will always be 1 + */ +function captureHold(x, y, w, h) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + requireAlt1(); + var r = alt1.bindRegion(x, y, w, h); + if (r <= 0) { + throw new Alt1Error("capturehold failed"); + } + return new imgref_1.ImgRefBind(r, x, y, w, h); +} +exports.captureHold = captureHold; +/** + * Same as captureHoldRegion, but captures the screen instead of the rs client. it also uses screen coordinates instead and can capture outside of the rs client + */ +function captureHoldScreen(x, y, w, h) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + requireAlt1(); + var r = alt1.bindScreenRegion(x, y, w, h); + if (r <= 0) { + return false; + } + return new imgref_1.ImgRefBind(r, x, y, w, h); +} +exports.captureHoldScreen = captureHoldScreen; +/** + * bind the full rs window if the rs window can be detected by alt1, otherwise return the full screen + */ +function captureHoldFullRs() { + return captureHold(0, 0, alt1.rsWidth, alt1.rsHeight); +} +exports.captureHoldFullRs = captureHoldFullRs; +/** + * returns a subregion from a bound image + * used internally in imgreftobuf if imgref is a bound image + * @deprecated This should be handled internall by the imgrefbind.toData method + */ +function transferImageData(handle, x, y, w, h) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + requireAlt1(); + if (alt1.bindGetRegionBuffer) { + return new imagedata_extensions_1.ImageData(alt1.bindGetRegionBuffer(handle, x, y, w, h), w, h); + } + var r = new imagedata_extensions_1.ImageData(w, h); + var x1 = x; + while (true) { //split up the request to to exceed the single transfer limit (for now) + var x2 = Math.min(x + w, Math.floor(x1 + (maxtransfer / 4 / h))); + var a = alt1.bindGetRegion(handle, x1, y, x2 - x1, h); + if (!a) { + throw new Alt1Error(); + } + decodeImageString(a, r, x1 - x, 0, x2 - x1, h); + x1 = x2; + if (x1 == x + w) { + break; + } + ; + } + return r; +} +exports.transferImageData = transferImageData; +/** + * decodes a returned string from alt1 to an imagebuffer + */ +function decodeImageString(imagestring, target, x, y, w, h) { + var bin = atob(imagestring); + var bytes = target.data; + w |= 0; + h |= 0; + var offset = 4 * x + 4 * y * target.width; + var target_width = target.width | 0; + for (var a = 0; a < w; a++) { + for (var b = 0; b < h; b++) { + var i1 = (offset + (a * 4 | 0) + (b * target_width * 4 | 0)) | 0; + var i2 = ((a * 4 | 0) + (b * 4 * w | 0)) | 0; + bytes[i1 + 0 | 0] = bin.charCodeAt(i2 + 2 | 0); //fix weird red/blue swap in c# + bytes[i1 + 1 | 0] = bin.charCodeAt(i2 + 1 | 0); + bytes[i1 + 2 | 0] = bin.charCodeAt(i2 + 0 | 0); + bytes[i1 + 3 | 0] = bin.charCodeAt(i2 + 3 | 0); + } + } + return target; +} +exports.decodeImageString = decodeImageString; +/** + * encodes an imagebuffer to a string + */ +function encodeImageString(buf, sx = 0, sy = 0, sw = buf.width, sh = buf.height) { + var raw = ""; + for (var y = sy; y < sy + sh; y++) { + for (var x = sx; x < sx + sw; x++) { + var i = 4 * x + 4 * buf.width * y | 0; + raw += String.fromCharCode(buf.data[i + 2 | 0]); + raw += String.fromCharCode(buf.data[i + 1 | 0]); + raw += String.fromCharCode(buf.data[i + 0 | 0]); + raw += String.fromCharCode(buf.data[i + 3 | 0]); + } + } + return btoa(raw); +} +exports.encodeImageString = encodeImageString; +/** + * mixes the given color into a single int. This format is used by alt1 + */ +function mixColor(r, g, b, a = 255) { + return (b << 0) + (g << 8) + (r << 16) + (a << 24); +} +exports.mixColor = mixColor; +function unmixColor(col) { + var r = (col >> 16) & 0xff; + var g = (col >> 8) & 0xff; + var b = (col >> 0) & 0xff; + return [r, g, b]; +} +exports.unmixColor = unmixColor; +function identifyApp(url) { + if (exports.hasAlt1) { + alt1.identifyAppUrl(url); + } +} +exports.identifyApp = identifyApp; +function resetEnvironment() { + exports.hasAlt1 = (typeof alt1 != "undefined"); + exports.skinName = exports.hasAlt1 ? alt1.skinName : "default"; +} +exports.resetEnvironment = resetEnvironment; +function convertAlt1Version(str) { + var a = str.match(/^(\d+)\.(\d+)\.(\d+)$/); + if (!a) { + throw new RangeError("Invalid version string"); + } + return (+a[1]) * 1000 * 1000 + (+a[2]) * 1000 + (+a[3]) * 1; +} +var cachedVersionInt = -1; +/** + * checks if alt1 is running and at least the given version. versionstr should be a string with the version eg: 1.3.2 + * @param versionstr + */ +function hasAlt1Version(versionstr) { + if (!exports.hasAlt1) { + return false; + } + if (cachedVersionInt == -1) { + cachedVersionInt = alt1.versionint; + } + return cachedVersionInt >= convertAlt1Version(versionstr); +} +exports.hasAlt1Version = hasAlt1Version; +/** + * Gets the current cursor position in the game, returns null if the rs window is not active (alt1.rsActive) + */ +function getMousePosition() { + var pos = alt1.mousePosition; + if (pos == -1) { + return null; + } + return { x: pos >>> 16, y: pos & 0xFFFF }; +} +exports.getMousePosition = getMousePosition; +/** + * Registers a given HTML element as a frame border, when this element is dragged by the user the Alt1 frame will resize accordingly + * Use the direction arguements to make a given direction stick to the mouse. eg. Only set left to true to make the element behave as the left border + * Or set all to true to move the whole window. Not all combinations are permitted + */ +function addResizeElement(el, left, top, right, bot) { + if (!exports.hasAlt1 || !alt1.userResize) { + return; + } + el.addEventListener("mousedown", function (e) { + alt1.userResize(left, top, right, bot); + e.preventDefault(); + }); +} +exports.addResizeElement = addResizeElement; +/** + * Add an event listener + */ +function on(type, listener) { + if (!exports.hasAlt1) { + return; + } + if (!alt1.events) { + alt1.events = {}; + } + if (!alt1.events[type]) { + alt1.events[type] = []; + } + alt1.events[type].push(listener); +} +exports.on = on; +/** + * Removes an event listener + */ +function removeListener(type, listener) { + var elist = exports.hasAlt1 && alt1.events && alt1.events[type]; + if (!elist) { + return; + } + var i = elist.indexOf(listener); + if (i == -1) { + return; + } + elist.splice(i, 1); +} +exports.removeListener = removeListener; +/** + * Listens for the event to fire once and then stops listening + * @param event + * @param cb + */ +function once(type, listener) { + var fn = (e) => { + removeListener(type, fn); + listener(e); + }; + on(type, fn); +} +exports.once = once; +; +/** + * Used to read a set of images from a binary stream returned by the Alt1 API + */ +class ImageStreamReader { + constructor(reader, ...args) { + this.framebuffer = null; + this.pos = 0; + this.reading = false; + this.closed = false; + //paused state + this.pausedindex = -1; + this.pausedbuffer = null; + this.streamreader = reader; + if (args[0] instanceof imagedata_extensions_1.ImageData) { + this.setFrameBuffer(args[0]); + } + else if (typeof args[0] == "number") { + this.setFrameBuffer(new imagedata_extensions_1.ImageData(args[0], args[1])); + } + } + /** + * + */ + setFrameBuffer(buffer) { + if (this.reading) { + throw new Error("can't change framebuffer while reading"); + } + this.framebuffer = buffer; + } + /** + * Closes the underlying stream and ends reading + */ + close() { + this.streamreader.cancel(); + } + /** + * Reads a single image from the stream + */ + async nextImage() { + if (this.reading) { + throw new Error("already reading from this stream"); + } + if (!this.framebuffer) { + throw new Error("framebuffer not set"); + } + this.reading = true; + var synctime = -Date.now(); + var starttime = Date.now(); + var r = false; + while (!r) { + if (this.pausedindex != -1 && this.pausedbuffer) { + r = this.readChunk(this.pausedindex, this.framebuffer.data, this.pausedbuffer); + } + else { + synctime += Date.now(); + var res = await this.streamreader.read(); + synctime -= Date.now(); + if (res.done) { + throw new Error("Stream closed while reading"); + } + var data = res.value; + r = this.readChunk(0, this.framebuffer.data, data); + } + } + synctime += Date.now(); + //console.log("Decoded async image, " + this.framebuffer.width + "x" + this.framebuffer.height + " time: " + (Date.now() - starttime) + "ms (" + synctime + "ms main thread)"); + this.reading = false; + return this.framebuffer; + } + readChunk(i, framedata, buffer) { + //very hot code, explicit int32 casting with |0 speeds it up by ~ x2 + i = i | 0; + var framesize = framedata.length | 0; + var pos = this.pos; + var datalen = buffer.length | 0; + //var data32 = new Float64Array(buffer.buffer); + //var framedata32 = new Float64Array(framedata.buffer); + //fix possible buffer misalignment + //align to 16 for extra loop unrolling + while (i < datalen) { + //slow loop, fix alignment and other issues + while (i < datalen && pos < framesize && (pos % 16 != 0 || !((i + 16 | 0) <= datalen && (pos + 16 | 0) <= framesize))) { + var rel = pos; + if (pos % 4 == 0) { + rel = rel + 2 | 0; + } + if (pos % 4 == 2) { + rel = rel - 2 | 0; + } + framedata[rel | 0] = buffer[i | 0]; + i = i + 1 | 0; + pos = pos + 1 | 0; + } + //fast unrolled loop for large chunks i wish js had some sort of memcpy + if (pos % 16 == 0) { + while ((i + 16 | 0) <= datalen && (pos + 16 | 0) <= framesize) { + framedata[pos + 0 | 0] = buffer[i + 2 | 0]; + framedata[pos + 1 | 0] = buffer[i + 1 | 0]; + framedata[pos + 2 | 0] = buffer[i + 0 | 0]; + framedata[pos + 3 | 0] = buffer[i + 3 | 0]; + framedata[pos + 4 | 0] = buffer[i + 6 | 0]; + framedata[pos + 5 | 0] = buffer[i + 5 | 0]; + framedata[pos + 6 | 0] = buffer[i + 4 | 0]; + framedata[pos + 7 | 0] = buffer[i + 7 | 0]; + framedata[pos + 8 | 0] = buffer[i + 10 | 0]; + framedata[pos + 9 | 0] = buffer[i + 9 | 0]; + framedata[pos + 10 | 0] = buffer[i + 8 | 0]; + framedata[pos + 11 | 0] = buffer[i + 11 | 0]; + framedata[pos + 12 | 0] = buffer[i + 14 | 0]; + framedata[pos + 13 | 0] = buffer[i + 13 | 0]; + framedata[pos + 14 | 0] = buffer[i + 12 | 0]; + framedata[pos + 15 | 0] = buffer[i + 15 | 0]; + //could speed it up another x2 but wouldn't be able to swap r/b swap and possible alignment issues + //framedata32[pos / 8 + 0 | 0] = data32[i / 8 + 0 | 0]; + //framedata32[pos / 8 + 1 | 0] = data32[i / 8 + 1 | 0]; + //framedata32[pos / 4 + 2 | 0] = data32[i / 4 + 2 | 0]; + //framedata32[pos / 4 + 3 | 0] = data32[i / 4 + 3 | 0]; + pos = pos + 16 | 0; + i = i + 16 | 0; + } + } + if (pos >= framesize) { + this.pausedbuffer = null; + this.pausedindex = -1; + this.pos = 0; + if (i != buffer.length - 1) { + this.pausedbuffer = buffer; + this.pausedindex = i; + } + return true; + } + } + this.pos = pos; + this.pausedbuffer = null; + this.pausedindex = -1; + return false; + } +} +exports.ImageStreamReader = ImageStreamReader; +/** + * Asynchronously captures a section of the game screen + */ +async function captureAsync(...args) { + requireAlt1(); + var rect = rect_1.default.fromArgs(...args); + if (alt1.captureAsync) { + let img = await alt1.captureAsync(rect.x, rect.y, rect.width, rect.height); + return new imagedata_extensions_1.ImageData(img, rect.width, rect.height); + } + if (!hasAlt1Version("1.4.6")) { + return capture(rect.x, rect.y, rect.width, rect.height); + } + var url = "https://alt1api/pixel/getregion/" + encodeURIComponent(JSON.stringify(Object.assign(Object.assign({}, rect), { format: "raw", quality: 1 }))); + var res = await fetch(url); + var imgreader = new ImageStreamReader(res.body.getReader(), rect.width, rect.height); + return imgreader.nextImage(); +} +exports.captureAsync = captureAsync; +/** + * Asynchronously captures multple area's. This method captures the images in the same render frame if possible + * @param areas + */ +async function captureMultiAsync(areas) { + requireAlt1(); + var r = {}; + if (alt1.captureMultiAsync) { + let bufs = await alt1.captureMultiAsync(areas); + for (let a in areas) { + if (!bufs[a]) { + r[a] = null; + } + r[a] = new imagedata_extensions_1.ImageData(bufs[a], areas[a].width, areas[a].height); + } + return r; + } + var capts = []; + var captids = []; + for (var id in areas) { + if (areas[id]) { + capts.push(areas[id]); + captids.push(id); + } + else { + r[id] = null; + } + } + if (capts.length == 0) { + return r; + } + if (!hasAlt1Version("1.5.1")) { + var proms = []; + for (var a = 0; a < capts.length; a++) { + proms.push(captureAsync(capts[a])); + } + var results = await Promise.all(proms); + for (var a = 0; a < capts.length; a++) { + r[captids[a]] = results[a]; + } + } + else { + var res = await fetch("https://alt1api/pixel/getregionmulti/" + encodeURIComponent(JSON.stringify({ areas: capts, format: "raw", quality: 1 }))); + var imgreader = new ImageStreamReader(res.body.getReader()); + for (var a = 0; a < capts.length; a++) { + var capt = capts[a]; + imgreader.setFrameBuffer(new imagedata_extensions_1.ImageData(capt.width, capt.height)); + r[captids[a]] = await imgreader.nextImage(); + } + } + return r; +} +exports.captureMultiAsync = captureMultiAsync; +/** + * Starts capturing a realtime stream of the game. Make sure you keep reading the stream and close it when you're done or Alt1 WILL crash + * @param framecb Called whenever a new frame is decoded + * @param errorcb Called whenever an error occurs, the error is rethrown if not defined + * @param fps Maximum fps of the stream + */ +function captureStream(x, y, width, height, fps, framecb, errorcb) { + requireAlt1(); + if (!hasAlt1Version("1.4.6")) { + throw new Alt1Error("This function is not supported in this version of Alt1"); + } + var url = "https://alt1api/pixel/streamregion/" + encodeURIComponent(JSON.stringify({ x, y, width, height, fps, format: "raw" })); + var res = fetch(url).then(async (res) => { + var reader = new ImageStreamReader(res.body.getReader(), width, height); + try { + while (!reader.closed && !state.closed) { + var img = await reader.nextImage(); + if (!state.closed) { + framecb(img); + state.framenr++; + } + } + } + catch (e) { + if (!state.closed) { + reader.close(); + if (errorcb) { + errorcb(e); + } + else { + throw e; + } + } + } + if (!reader.closed && state.closed) { + reader.close(); + } + }); + var state = { + x, y, width, height, + framenr: 0, + close: () => { state.closed = true; }, + closed: false, + }; + return state; +} +exports.captureStream = captureStream; + + +/***/ }), + +/***/ "canvas": +/*!*************************!*\ + !*** external "canvas" ***! + \*************************/ +/***/ ((module) => { + +if(typeof __WEBPACK_EXTERNAL_MODULE_canvas__ === 'undefined') { var e = new Error("Cannot find module 'canvas'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_canvas__; + +/***/ }), + +/***/ "electron/common": +/*!**********************************!*\ + !*** external "electron/common" ***! + \**********************************/ +/***/ ((module) => { + +if(typeof __WEBPACK_EXTERNAL_MODULE_electron_common__ === 'undefined') { var e = new Error("Cannot find module 'electron/common'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_electron_common__; + +/***/ }), + +/***/ "sharp": +/*!************************!*\ + !*** external "sharp" ***! + \************************/ +/***/ ((module) => { + +if(typeof __WEBPACK_EXTERNAL_MODULE_sharp__ === 'undefined') { var e = new Error("Cannot find module 'sharp'"); e.code = 'MODULE_NOT_FOUND'; throw e; } + +module.exports = __WEBPACK_EXTERNAL_MODULE_sharp__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_79245__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_79245__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __nested_webpack_require_79245__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __nested_webpack_exports__ = __nested_webpack_require_79245__("./src/base/index.ts"); +/******/ +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +/***/ }), + +/***/ "../node_modules/alt1/dist/dialog/index.js": +/*!*************************************************!*\ + !*** ../node_modules/alt1/dist/dialog/index.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js"), __webpack_require__(/*! alt1/ocr */ "../node_modules/alt1/dist/ocr/index.js")); + else {} +})(globalThis, (__WEBPACK_EXTERNAL_MODULE_alt1_base__, __WEBPACK_EXTERNAL_MODULE_alt1_ocr__) => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./src/dialog/imgs/boxtl.data.png": +/*!****************************************!*\ + !*** ./src/dialog/imgs/boxtl.data.png ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_871__) => { + +module.exports=(__nested_webpack_require_871__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAx0lEQVQ4T5VRywrCMBBMaytYyMFHDw16CNWDBg8WoWAFpTf//4ecsGENMQ0UhmVmO5PdNEKZru0GVCLEL/cnS/MYwU3/Jo+AFiKbgevrE7bSmArksgk6DumVsrIKOmJ/G8JWGrMvjUBkbgLBhFzufBkB7uBPQKDcKJYR4C39ALhUuqj15J7/KwHIVIfztjWoZXOkmYuVtB4OQAM4GAFUh+UabmelZ0GANXdh+mW83eyoUz/ykeQm0G4g/j+wnC9NNQAl+VNR6y/yyxm6AFlANgAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/boxtl_leg.data.png": +/*!********************************************!*\ + !*** ./src/dialog/imgs/boxtl_leg.data.png ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_1594__) => { + +module.exports=(__nested_webpack_require_1594__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAE0SURBVDhPjZFNTsMwEIVtJ45D05YmLVKBJRISsOIILNiw5QosOXpIKcpPHduFl0wINAHEJ+tpPB6/Gcv8+emRHZIX1TQ6QuBLbs37QNnVxQlj/P+L31yuH+7vZrNptt2QhxSy0vXe6SAMlYrQqshzyiPmt9fny2WslMqyrQr4+vQsTV8m0eTtdRNN582IjGmtob4nrNsLiqBJcjxfxKhGXBblIk6cNVL68AKwQDUCUVuHCsJZR8egrCpkdq0SSEIbb89vhoOZ53vNSYv0JeVpHni16fYCYYztsz10hzDWQEXQulI7Aq266BD0hHYdqC+BVl30CXlDUUZv+Bp9DIrIG4pBxE7XdPAb/bTkK0IVjN/6I1QmVquE9mMGo2KLJdI06xIjBOff72CLn/rr0YOfwVZr/QEeBH9rQlJ0YgAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/boxtr.data.png": +/*!****************************************!*\ + !*** ./src/dialog/imgs/boxtr.data.png ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_2513__) => { + +module.exports=(__nested_webpack_require_2513__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA3UlEQVQ4T6WTwQrCMBBEk9oKigEVFSweLOLF6sFehOYgePP/P2jNrE1ZcJFUD68J2cwkO23NofF0vD0IY1k3VLfveXVu+jWMALVYxzowxtjw+A2YGVtM1WIKl/szjEohlb8NuAWtkMru6sMYJplbkR0vKF9XH5s0kBs0fYgxyJRAM7clV1YMGxB9R4pxAG6J04tlOdwAIm63uzVnoIkk2unRAF+kKpJEg9HEcdAwQA59iJpIEg2kEEa4QbIBNkMYM0Arg0NEC1KM14i/WBVJuPcutHy+YQMw259CiJ5egv+YzBEq3jQAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/boxtr_leg.data.png": +/*!********************************************!*\ + !*** ./src/dialog/imgs/boxtr_leg.data.png ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_3264__) => { + +module.exports=(__nested_webpack_require_3264__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAFgSURBVDhPnZO9TsMwFIWPHZuUpo2g6hswsbMzsbEgMfAKiIUnYOWNWBh4F1CFhFKKojatmx/jY+E2RRWK+KSrm9ycHF//iceHO7tal5hM3tGLDyAkIIVAY+0maxUBjYApDYSwOOgdulqMxXwOAbjKPzk9GUPc315bLTWWZo2mNs69hzhOvIAjKC3A72Q4HOAj+9zUnp5fIG6uzm2WTdFP+si/ZkgGqRcTY4zPKpKo6sbnfjJAsZj79+l0BsmfSbEocHQ8Ql2V0Fq5LmIfNKaYz8x5nvsckEHIKJZLX1z95AC/kTRNN1rpullXNdyab9FKI3JBQvu1EwVCjVBLdgwCwSRQumm1aRsJ6/b5Ly4vzvYKInc23l4n+zv4DTtoj0pUpHzuZMD5hoUMBMNOBmx3Hyt3+DoZhJ3g+Wib8e507oBRltXOto7Ho24GvJVcNHbACGTuXnQy4MhcNGbGdhrAN5b0ly21yuFfAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimg.data.png": +/*!******************************************!*\ + !*** ./src/dialog/imgs/chatimg.data.png ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_4247__) => { + +module.exports=(__nested_webpack_require_4247__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAAwUlEQVQYV2OYPGlSV1dXcnJyRmqSqbUdQ3VNNRB5uTkJCwuLKqgxtLS0ACVVFGQ4eQUFpRUZgBxHWytOHl4oX0tLS1lZGaiYkZOXW1CUQVXXGChkbGwsJSUFFGI4YM+fqycmpahqoG8AVMVwxJipUptPUFIOqEtEkJdBT4JPSVYSqBgoCTSSQUVLG8QCms/DCzI/OjrK0syEgYERaDiI7+3lHRwcDNQC5bu6ukKEgLp4RKUZsjPSgEJAfrC/t7GhHgChFSifluVS6gAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimg_leg.data.png": +/*!**********************************************!*\ + !*** ./src/dialog/imgs/chatimg_leg.data.png ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_4970__) => { + +module.exports=(__nested_webpack_require_4970__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEOSURBVChTVY+7SgNBFIZnZ3aTWdCYddVcRBIVREEC2gcsFnwMO9/JxsrGzkbQB1AkleArWJjLXhRhJnNbf9ltcviL/3z/nDMzXjI+Hx0PDoadh6dJI6DGOUKIT6kPenZ6eHv/fDTo7vbbRSF5GCCjoDd3j/v9rThel0sLKoWG2DzN97rxdrwhlFHaCqGNdRAF7e1EUhlrHIQl1sAbGjb/N1aFXgqptYEoD3nx/Yu+QvURXI6+tqtFPcpru1os3my5oBX6tgaEaOtcWbKmTywJGF+rMlA8Cgm9vkry+ed0luXLxo9Q+I12JcSGvc7F+ORt8oE5a32pvEositqeI5fJ6OX1/Ws2TbNFUWR5nv4B2LeYEU2WizoAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimgactive.data.png": +/*!************************************************!*\ + !*** ./src/dialog/imgs/chatimgactive.data.png ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_5869__) => { + +module.exports=(__nested_webpack_require_5869__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAApklEQVQYV2Po6upqaWmJjo4CIk1dQ4ZiMLCzNGVgYGQRkGCorqmOjggTEeQF8hm4BRmCg4ONDfVAHAhfWVlZWFgYygciKUVVSVkFoCgnD1jLHkOGZHlWbkFRoBCIf0CdIV+GgZGTF6pLnoNBkJcLqhiIBCXloCwgAprv7eWtraGG4FtZWXq5OQG1QPnGxsaurq5AIRCfhYshKTYKqASoy83RRkVBBgAFhh2w1olrrAAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimgactive_leg.data.png": +/*!****************************************************!*\ + !*** ./src/dialog/imgs/chatimgactive_leg.data.png ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_6580__) => { + +module.exports=(__nested_webpack_require_6580__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEESURBVChTPY4xTgMxEEXtmfFmE1hpRSQECqIIVRBCEanpuABnyImo09FzASokjgAVVUQBURpCSMiKHdt8ZwVf1mj8/veM7dXlxbBfnvTad4/vmSMNwRgjRAJ6fno4uX3IssA5k5KV5BHozeQedK9s5bm0dwmVmfh1OisLAa3rEJV8DCFE7wOBFjsO1AbGBAg0jerkDNTQSL6hyRDrfIjN5f8RRPpjmCw6NEhgjakdKknWJGCnhFj8yKDSfK7IQla2/p+46LBRaTkiNlETwvoYDY2vBx/V6m2x2u5IpxH3j4+Gg4Pnl1mluvSi335TBRwuu/vO+NFZ72m6+FxvlnW99v5L9ReDbXkhpJVqYwAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimghover.data.png": +/*!***********************************************!*\ + !*** ./src/dialog/imgs/chatimghover.data.png ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_7463__) => { + +module.exports=(__nested_webpack_require_7463__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAIAAABoykFxAAAAz0lEQVQYV2M4dfLEjp07W1pamhrrnL38GFavXr10yeKk2ChhYWEpFW2GLVu2dLQ1a2uocfIKiipoMABVRoaFcPLwcguKiiqoMVhZWRob6kmKCgGFBMSkGUztnU2t7VxdXZWVlYFCDP9DhSfbyaloaQMVSklJMfz3YF1sJSylqKqlpQW0gsFOQVhLTRnC4RGVZjAyBymDma/BUF1T7e3lzcDACJQUlFZkSE5OLsjNAmoByoP4YZGR2RlpQCGgLpD+Sb2d0dFR2dnZQC8Y6WkBAPN1NR2AAHfmAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./src/dialog/imgs/chatimghover_leg.data.png": +/*!***************************************************!*\ + !*** ./src/dialog/imgs/chatimghover_leg.data.png ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_8222__) => { + +module.exports=(__nested_webpack_require_8222__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAIAAACdNMrBAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAEjSURBVChTVc89SwNBEIDh2727fChqFosQLExMY4gIsbOIBLT0B9joX9RKTCOksLESSa1Y5TSa+8rdze7s7jl4lfAUw7sMy7CL8cnx4f5Bt3338FzzubbWcRyPc4/q6Kg/nT7eXA72erurz2xHNCBXnOrt/ex01G2JjSwq6nUeh5Ci67ISR30x7DVXqQVAkmegC+BUOx3xFhilNEmTQgIS3qh79JtWOksKkudQ4TXPWyxCpXWSAQGpK3wZrmmDJqn+4VSryRgkIFXF3doUvldyVtJlf8c5gFbbkh5qa822mz5FUBYRpTJaG359dRYE3/OPKEpgncu0MBJtCMztdtqT8eDl9V0xP0cXFe05BktXiBazzvlkOHuaB8vVVxj/xOkySn4BoaPZbEW+44oAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimg.data.png": +/*!**********************************************!*\ + !*** ./src/dialog/imgs/continueimg.data.png ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_9141__) => { + +module.exports=(__nested_webpack_require_9141__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAABTklEQVRIS72PMUsDQRCFB2Jjk85KsPEPmMYmgig2gWAlKWwCIiIihIC1WIpiJZY2SpqgpLCQNDZRAjZWHqmvsVEQ1Ebl8J0D4zIXD5HdgY/lzey7fffoeVD9fFxikpfaP/jLhxLhojy+kPdRjZKokhIvBieqIC+6WcVpkfjdiz5u55P7BR6CgqDu2dbeaQdnGpoxeAcpaT0buBsD/XQ1pwwhoPde2YDX/oxbTxpir5x+sasXt8vZhm/9knL6hR5OJm0YHI2D9c1GdeWH7sG0svmF4uMJA7jbbnPW7YaR98rsC7xMHGBAttvd/pjyeIeQYcD1TtGtB42N8oSAettFBnkgR+SPEIxaytVlc5Qb4oQG7q37FSOjMiibQjwMcZIBnY0RcNiYYqFuA0GtOl0s0/laYSj4D6XdjSBLCLENdQru7W9OeUpGhsd8YGvV6Qu6U2ehlR3eegAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimg_leg.data.png": +/*!**************************************************!*\ + !*** ./src/dialog/imgs/continueimg_leg.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_10068__) => { + +module.exports=(__nested_webpack_require_10068__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAASPSURBVEhLrVZLaFxVGD7nPubeO5NMZpIQTYfaNn2RREsrbQXbuOnKR4WCiKtCV2JABF24qTvdCK5ciIWudeFCqkuLC6WKQqVmEVsMjUkTyySTec993+t37n/n5CZNShQ/Dof/db7z/efce2f4J+++PDbqsgz0sN2y9a7NYResmIKPgTVgptY26IOpwViz0cnFdur04XFrqJDw64OargZ+ODKQJPaAWr1td5zs1lq+pKpmztBzYaPWYcxvV9cN/v7sa4cr1ulzz6Oitv7As0OqBnzH6ThRr1VPfcbyxfKAqeimWRotwe1126hHGWW3Fft2jwzdyn/42U2ygatvXaAU4iAsl/KwiQTMoqK/deymbNwoY95oBiZvJwGhhAzSk7PUbr1brdZkCkoWVmzR3jOT+1p+Keita/nRRnVpYEDs1+n0YGAWHAkCvVwyXGyw3lbhbstKtBylaEbNFg4wxRc3bn19fSaf97hy5O8H9y6/9+vrLz2naoIE4Lki6skmZJmJTQZB67DCE0XxZFEKcZKdlKdAcHhIm5tfFe1V9o1hJapjrxUG4vZ8P8BsWgZmx3Z1XYMaMihFoDgMpMjFTJVBIMo0TYPxzfd3Pv/giFUq5y02NHKMOnxxZpoKABgAtiMeLKGgNAjZOGbYMGSQXMsySRKaWlmtpu3B6rS7iEpIIkC6j4JIUycDCnp++qjf/PmPj9/cPzRmjIyXZYcXzhxmqo5sTk9vcjdInj0ChNPTRxcWltXzZ6YUzpuNtud5UQZJXwEMWkBBx/U5Z4qiUFDWIEKGBLKbmkJ/ojJ87cbiC5OFKPYVtTf65LFzx/Offjk3MT7EFDWMYjlUNSUHwEDB1N8zsAQaOp2uaM80crWaeIkl3W7DdV0ehX4Y+0GIIYK+F8YctpS1RVPoszhygwjuU+Pl69/+9cYrxcDrdZvL+4+ffPrg4LWvfhcdxhGaTFYLZXJQ5L+hULAcx+XvXLnIrOFWdVlIAZKnZRvQVWrtAsMQbymBig1NdIvGkpjAj7/d/2h2Csbd+bWV9bXbS2a96Zw/dYgqBR7dGpIQ3F3YYzA2NtyoN9WTkwcCp92znfTM+tB4LA4VZ5/5lmSBWwtjRoNF6SqAsqCy/UgW/HRn8erlibxqz99tNZuL9Vb050N29sRBVeG0r6bgoe+/gaGPTUEFBi/ZnYRJSZuVu0M8nVGknjhaCYMgK4UG1KMIvJiznciRxbYURIvlUcC4gvmXuaW3Xy2xwL2/EqG3jY5+a8E4PVXhDI1FIcQmTW4eaHLnJCBLLiUlxyiQLsmcCzEggs+4aO/U5IG2GwoplMCAJiru824BVVJNfxUuD5McUdKVyCMes9W19nihttFouW4Dvf1wL4fekEWK40sV480UTSIC6fKgd4SUhBMRLt180qS48MSliO/hNDi/cmmGVv5fwNnL14nuweT2d7cfwiga4n/Z2elDIpfAiS3MKCBj8z38lyiqvpP5DyjBZy8+qxs5WGEURH76JVB0sY2q7PxbtyOwnAwiIQbp7hFy1Y4QVKrNQnEQBNRnRWrGFsGBG/wD9kSQTvgpZ/YAAAAASUVORK5CYII=") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimgdown.data.png": +/*!**************************************************!*\ + !*** ./src/dialog/imgs/continueimgdown.data.png ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_12171__) => { + +module.exports=(__nested_webpack_require_12171__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAABMklEQVRIS92VoU4DQRCG5wKGNyEo3gB1BtWEYGqaNAGBoQ3BoAiqKVXwDJUEgcAgCQIUBoPgVfg2/2WzGUpqdk40+XqZ3Z3u3Le32bXbQbMc2UaCmj2cbr1dWTSvl4mXC3s82+appsupDmqp3ueNRaN6s+nBaHzCU82Pa59WF9TSihJ9zex7EQgl7s/3cRPEcqNuUGkmRy2tohsIotSTIW/gcurS6f3c9QFf6a8hL+HSKoJatznzPsm7pWyu7FlL+RfmZzdS73BwtNseZ56nOyq9dv6VCerMQwSKZZS+Xj9Hi9wmw73SjSadcQdMOlr4qUYczP+fm3D5VWDapNfPvQelHjE7xyVUJ9173O66ZKNhLWUoNzcaAWqd3vsknFxSgRutjmrZvG34iE9D2zCQmrfNLxl9slarbU3QAAAAAElFTkSuQmCC") + +/***/ }), + +/***/ "./src/dialog/imgs/continueimgdown_leg.data.png": +/*!******************************************************!*\ + !*** ./src/dialog/imgs/continueimgdown_leg.data.png ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __nested_webpack_require_13074__) => { + +module.exports=(__nested_webpack_require_13074__(/*! alt1/base */ "alt1/base").ImageDetect.imageDataFromBase64)("iVBORw0KGgoAAAANSUhEUgAAAEoAAAANCAIAAACB72/yAAAAAW5vUEUAYtdMlAAAAARub1BFAAAAAEEgjiIAAAAJbm9QRQAAAAAAAAAAAKGKctUAAAQQSURBVEhL1VW9bxxFFN/52NvbO59sEic5GZMIEHFkAiICKaRDAlGAlJKGioqShpqejn+ABiEoqFIhkIJEk44miSCRyIcSJXawfT6f7253dueD39xbz62/Ekei4ae5pzdv3rz3fm9m59jHb780N5tFu1GWttKOgDjmlXY4DgsY9nKRQkppaAqkup3JUTXZh0IViFlP3UgalTZZhexvpezyu6ePH4u73QXMc+15ltZBxpxBscNxVnhXQtpo8JkWlljccGVlJ394QpKzZSl3WaZYmjiSV69PO/j+mymMUGCHZ+eFhOwEBIek1GQJGJUCYUlHJaRQPVCwZdTrBzsq2eiVnt7phZOYb6u8HRuEoOWAEBGlkKLyPGk2SQ+AkchU8x2oTP/xoPj2m8+gt9qdR3/f/PLr395alILzJJXkQ6CYSBcShR7VU0PCk5ZI7yRNFF9f8l1Lmg8e/yOWFmfjNM1LheWssEbrPWM0NI4Jbdh4O4+YhTTaqrzAwJR8yAg3X8KEUlHosjTWOGPt6sBeXErKfOzc+MTi2UvL7e9+vjPfjIyxlY9GHEvRkI4iI2ae+yWEhU4ZyRMKLZG+PRyHJWxEqb4qFuWZ8vSSpgQ31EQeewbKrSuT+iuQPRjrU+f8jYU0pTs1w3+8+vDCa3NWS602uy8vg+H3v9ydSyxzzBgXce8Jqhi4+BTKR5zAx7QWDkcBBcFIW8lokHt60CaHsKv0A4E0lP6ZgJsu8AFV02Mtd+Xa6jtLLYbuqhEx/OHXe2COVbhhcOEj1+MTK1ggyYIrHfSnA46jceHpzXQ6w8GuNyrEreuFMigCzQ79BgGaCjl9waad3uFWWv8ezrejK9fWPnpvCXdyfWXtzLnzyy+qn35fIYYAMUSiEKGyOxdYOc3wRWJa54wLQg2iwSMhJJMxz7LS/zHMd2cHm0NUD9dGIlgZafQpjrwirDRcTep7CrCLFGzZ70z0bq1FX31+yfLW9b/+XF/Zunl/Y6DSN07teskEF/TaoIBIVO1BAZAuppkHshBghE4y1EyeeLe2+8rTQ3HErQ7KhD349ivT84OIAeD2xScXoNy7/2R9q9/rjWE5dwJ/A1N6CRfTth6UN5QEWad0GEBKnDk+I7kIBx0Ai8HvaBf9MDSUKSy73Ys+/fDVXJnV1R644Q27sWLOzk3uEm4a27nYjKNuYyOc2oE9nZbEOPbS4Yb+gC3zD6cfkYiaPFZai1dOdmod/C+Bo5PGlYxt5FFHqs3+AO83/Q2CGwF/JYEe1Q3lmfeFh45gl/W3GJRwkuCFgTVM8YXjr51dfr0rW3v/o+sXnUB3GvJ5QZ/ijSdeaq2llPXvDRey0nYQsoQaKHXQgf3l4awqrYZBlrMPzi+00IH/P/Yf0iAr/gXJh0N13Pe/YwAAAABJRU5ErkJggg==") + +/***/ }), + +/***/ "./src/dialog/index.ts": +/*!*****************************!*\ + !*** ./src/dialog/index.ts ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_14933__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const a1lib = __importStar(__nested_webpack_require_14933__(/*! alt1/base */ "alt1/base")); +const OCR = __importStar(__nested_webpack_require_14933__(/*! alt1/ocr */ "alt1/ocr")); +const base_1 = __nested_webpack_require_14933__(/*! alt1/base */ "alt1/base"); +var imgs_rs3 = (0, base_1.webpackImages)({ + chatimg: __nested_webpack_require_14933__(/*! ./imgs/chatimg.data.png */ "./src/dialog/imgs/chatimg.data.png"), + chatimghover: __nested_webpack_require_14933__(/*! ./imgs/chatimghover.data.png */ "./src/dialog/imgs/chatimghover.data.png"), + chatimgactive: __nested_webpack_require_14933__(/*! ./imgs/chatimgactive.data.png */ "./src/dialog/imgs/chatimgactive.data.png"), + continueimg: __nested_webpack_require_14933__(/*! ./imgs/continueimg.data.png */ "./src/dialog/imgs/continueimg.data.png"), + continueimgdown: __nested_webpack_require_14933__(/*! ./imgs/continueimgdown.data.png */ "./src/dialog/imgs/continueimgdown.data.png"), + boxtl: __nested_webpack_require_14933__(/*! ./imgs/boxtl.data.png */ "./src/dialog/imgs/boxtl.data.png"), + boxtr: __nested_webpack_require_14933__(/*! ./imgs/boxtr.data.png */ "./src/dialog/imgs/boxtr.data.png") +}); +var imgs_leg = (0, base_1.webpackImages)({ + chatimg: __nested_webpack_require_14933__(/*! ./imgs/chatimg_leg.data.png */ "./src/dialog/imgs/chatimg_leg.data.png"), + chatimghover: __nested_webpack_require_14933__(/*! ./imgs/chatimghover_leg.data.png */ "./src/dialog/imgs/chatimghover_leg.data.png"), + chatimgactive: __nested_webpack_require_14933__(/*! ./imgs/chatimgactive_leg.data.png */ "./src/dialog/imgs/chatimgactive_leg.data.png"), + continueimg: __nested_webpack_require_14933__(/*! ./imgs/continueimg_leg.data.png */ "./src/dialog/imgs/continueimg_leg.data.png"), + continueimgdown: __nested_webpack_require_14933__(/*! ./imgs/continueimgdown_leg.data.png */ "./src/dialog/imgs/continueimgdown_leg.data.png"), + boxtl: __nested_webpack_require_14933__(/*! ./imgs/boxtl_leg.data.png */ "./src/dialog/imgs/boxtl_leg.data.png"), + boxtr: __nested_webpack_require_14933__(/*! ./imgs/boxtr_leg.data.png */ "./src/dialog/imgs/boxtr_leg.data.png") +}); +var fontmono = __nested_webpack_require_14933__(/*! ../fonts/aa_8px_mono.fontmeta.json */ "./src/fonts/aa_8px_mono.fontmeta.json"); +var fontheavy = __nested_webpack_require_14933__(/*! ../fonts/aa_8px_mono_allcaps.fontmeta.json */ "./src/fonts/aa_8px_mono_allcaps.fontmeta.json"); +class DialogReader { + constructor() { + this.pos = null; + } + find(imgref) { + if (!imgref) { + imgref = a1lib.captureHoldFullRs(); + } + if (!imgref) { + return null; + } + var boxes = []; + for (let imgs of [imgs_rs3, imgs_leg]) { + var pos = imgref.findSubimage(imgs.boxtl); + for (var a in pos) { + var p = pos[a]; + if (imgref.findSubimage(imgs.boxtr, p.x + 492, p.y, 16, 16).length != 0) { + boxes.push(Object.assign(Object.assign({}, p), { legacy: imgs == imgs_leg })); + } + } + } + if (boxes.length == 0) { + return false; + } + var box = boxes[0]; + if (boxes.length > 1) { + console.log("More than one dialog box found"); + } + this.pos = { x: box.x + 1, y: box.y + 1, width: 506, height: 130, legacy: box.legacy }; + return this.pos; + } + ensureimg(imgref) { + if (!this.pos) { + return null; + } + if (imgref && a1lib.Rect.fromArgs(imgref).contains(this.pos)) { + return imgref; + } + return a1lib.captureHold(this.pos.x, this.pos.y, this.pos.width, this.pos.height); + } + read(imgref) { + imgref = this.ensureimg(imgref); + if (!imgref) { + return false; + } + let title = this.readTitle(imgref); + var r = { + text: null, + opts: null, + title + }; + if (this.checkDialog(imgref)) { + r.text = this.readDialog(imgref, true); + return r; + } + else { + var opts = this.findOptions(imgref); + if (opts.length != 0) { + r.opts = this.readOptions(imgref, opts); + return r; + } + else { + return null; + } + } + } + readTitle(imgref) { + if (!this.pos) { + throw new Error("position not found yet"); + } + var buf = imgref.toData(this.pos.x, this.pos.y, this.pos.width, 32); + //somehow y coord can change, 19 for "choose and option:" 18 for npc names + var pos = OCR.findChar(buf, fontheavy, [255, 203, 5], Math.round(this.pos.width / 2) - 10, 16, 20, 4); + if (!pos) { + return ""; + } + var read = OCR.readSmallCapsBackwards(buf, fontheavy, [[255, 203, 5]], Math.round(this.pos.width / 2) - 10, pos.y, 150, 1); + return read.text.toLowerCase(); //normalize case since we don't actually know the original + } + checkDialog(imgref) { + if (!this.pos) { + throw new Error("position not found yet"); + } + var locs = []; + let imgs = (this.pos.legacy ? imgs_leg : imgs_rs3); + locs = locs.concat(imgref.findSubimage(imgs.continueimg, this.pos.x - imgref.x, this.pos.y - imgref.y, this.pos.width, this.pos.height)); + locs = locs.concat(imgref.findSubimage(imgs.continueimgdown, this.pos.x - imgref.x, this.pos.y - imgref.y, this.pos.width, this.pos.height)); + return locs.length != 0; + } + readDialog(imgref, checked) { + if (!this.pos) { + throw new Error("position not found yet"); + } + imgref = this.ensureimg(imgref); + if (!imgref) { + return null; + } + if (!checked) { + checked = this.checkDialog(imgref); + } + if (!checked) { + return null; + } + var lines = []; + var buf = imgref.toData(this.pos.x, this.pos.y + 33, this.pos.width, 80); + for (var y = 0; y < buf.height; y++) { + var hastext = false; + for (var x = 200; x < 300; x++) { + var i = x * 4 + y * 4 * buf.width; + if (buf.data[i] + buf.data[i + 1] + buf.data[i + 2] < 50) { + hastext = true; + break; + } + } + if (hastext) { + var chr = null; + chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 192, y + 5, 12, 3); + chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 246, y + 5, 12, 3); + chr = chr || OCR.findChar(buf, fontmono, [0, 0, 0], 310, y + 5, 12, 3); + if (chr) { + var read = OCR.readLine(buf, fontmono, [0, 0, 0], chr.x, chr.y, true, true); + if (read.text.length >= 3) { + lines.push(read.text); + } + y = chr.y + 5; + } + } + } + return lines; + } + findOptions(imgref) { + var locs = []; + if (!this.pos) { + throw new Error("position not found yet"); + } + let imgs = (this.pos.legacy ? imgs_leg : imgs_rs3); + var a = imgref.findSubimage(imgs.chatimg); + for (var b in a) { + locs.push({ x: a[b].x, y: a[b].y, hover: false, active: false }); + } + var a = imgref.findSubimage(imgs.chatimghover); + for (var b in a) { + locs.push({ x: a[b].x, y: a[b].y, hover: true, active: false }); + } + var a = imgref.findSubimage(imgs.chatimgactive); + for (var b in a) { + locs.push({ x: a[b].x, y: a[b].y, hover: false, active: true }); + } + return locs; + } + readOptions(imgref, locs) { + imgref = this.ensureimg(imgref); + if (!imgref) { + return null; + } + if (!this.pos) { + throw new Error("interface not found"); + } + var buf = imgref.toData(); + if (!locs) { + locs = this.findOptions(imgref); + } + var bgcol = [150, 135, 105]; + var fontcol = this.pos.legacy ? [255, 255, 255] : [174, 208, 224]; + var r = []; + for (var a = 0; a < locs.length; a++) { + var dx = locs[a].x + 30; + var dy = locs[a].y + 6; + var checkline = imgref.toData(dx, dy, Math.min(500, imgref.width - a), 1); + var row = null; + for (var x = 0; x < checkline.width; x++) { + var i = x * 4; + if (row) { + if (coldiff(checkline.data[i], checkline.data[i + 1], checkline.data[i + 2], bgcol[0], bgcol[1], bgcol[2]) < 75) { + row.width = x + 20; + break; + } + } + else if (coldiff(checkline.data[i], checkline.data[i + 1], checkline.data[i + 2], fontcol[0], fontcol[1], fontcol[2]) < 100) { + var text = ""; + var chr = OCR.findChar(buf, fontmono, fontcol, dx + x + 2 - imgref.x, dy + 3 - imgref.y, 30, 1); + if (chr) { + var read = OCR.readLine(buf, fontmono, fontcol, chr.x, chr.y, true, true); + var text = read.text; + } + row = { text: text, x: dx + x, y: dy, width: 200, buttonx: dx - 31, hover: !!locs[a].hover, active: locs[a].active }; + } + } + if (row) { + r.push(row); + } + } + r.sort((a, b) => a.y - b.y); + return r; + } +} +exports["default"] = DialogReader; +//TODO get rid of this or make it standard +function coldiff(r1, g1, b1, r2, g2, b2) { + return Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2); +} + + +/***/ }), + +/***/ "alt1/base": +/*!**************************************************************************************************!*\ + !*** external {"root":"A1lib","commonjs2":"alt1/base","commonjs":"alt1/base","amd":"alt1/base"} ***! + \**************************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_alt1_base__; + +/***/ }), + +/***/ "alt1/ocr": +/*!*********************************************************************************************!*\ + !*** external {"root":"OCR","commonjs2":"alt1/ocr","commonjs":"alt1/ocr","amd":"alt1/ocr"} ***! + \*********************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = __WEBPACK_EXTERNAL_MODULE_alt1_ocr__; + +/***/ }), + +/***/ "./src/fonts/aa_8px_mono.fontmeta.json": +/*!*********************************************!*\ + !*** ./src/fonts/aa_8px_mono.fontmeta.json ***! + \*********************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"chars":[{"width":7,"bonus":75,"chr":"a","pixels":[0,7,187,1,3,221,1,6,170,1,8,255,2,3,255,2,5,187,2,8,255,3,3,255,3,5,255,3,8,221,4,4,238,4,5,255,4,6,204,4,7,255,4,8,238],"secondary":false},{"width":7,"bonus":105,"chr":"b","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,204,1,4,170,1,7,170,1,8,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,170,4,4,170,4,7,170,5,5,187,5,6,187],"secondary":false},{"width":7,"bonus":50,"chr":"c","pixels":[0,5,170,0,6,187,1,4,187,1,7,187,2,3,255,2,8,255,3,3,255,3,8,255,4,3,221,4,8,221],"secondary":false},{"width":7,"bonus":105,"chr":"d","pixels":[0,5,187,0,6,187,1,4,170,1,7,170,1,8,170,2,3,255,2,8,255,3,3,255,3,8,255,4,3,204,4,4,170,4,7,170,4,8,187,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,221,5,7,221,5,8,204],"secondary":false},{"width":7,"bonus":75,"chr":"e","pixels":[0,5,187,0,6,170,1,4,187,1,5,255,1,7,204,2,3,255,2,5,255,2,8,255,3,3,255,3,5,255,3,8,255,4,3,187,4,5,255,4,8,221,5,5,204],"secondary":false},{"width":4,"bonus":50,"chr":"f","pixels":[0,3,204,1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204,2,1,255,2,3,255],"secondary":false},{"width":7,"bonus":115,"chr":"g","pixels":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,170,1,11,153,2,3,255,2,8,255,2,11,238,3,3,255,3,8,255,3,11,221,4,3,221,4,7,153,4,8,221,4,10,204,5,3,204,5,4,221,5,5,221,5,6,221,5,7,221,5,8,221,5,9,170],"secondary":false},{"width":7,"bonus":90,"chr":"h","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,170,1,4,204,2,3,255,3,3,255,4,3,170,4,4,221,4,5,221,4,6,221,4,7,221,4,8,204],"secondary":false},{"width":3,"bonus":35,"chr":"i","pixels":[0,1,238,0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204],"secondary":false},{"width":4,"bonus":50,"chr":"j","pixels":[0,11,153,1,11,170,2,1,204,2,3,204,2,4,221,2,5,221,2,6,221,2,7,221,2,8,221,2,9,221],"secondary":false},{"width":6,"bonus":70,"chr":"k","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,4,153,2,5,255,2,6,221,3,3,204,3,7,221],"secondary":false},{"width":3,"bonus":40,"chr":"l","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,1,8,255],"secondary":false},{"width":10,"bonus":115,"chr":"m","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,153,4,4,255,4,5,221,4,6,221,4,7,221,4,8,204,5,4,187,6,3,255,7,3,238,8,4,170,8,5,221,8,6,221,8,7,221,8,8,204],"secondary":false},{"width":7,"bonus":75,"chr":"n","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,221,2,3,238,3,3,255,4,3,238,5,4,170,5,5,221,5,6,221,5,7,221,5,8,204],"secondary":false},{"width":8,"bonus":70,"chr":"o","pixels":[0,5,187,0,6,170,1,4,204,1,7,221,2,3,238,2,8,238,3,3,255,3,8,255,4,3,238,4,8,255,5,4,204,5,7,221,6,5,170,6,6,170],"secondary":false},{"width":6,"bonus":90,"chr":"p","pixels":[0,3,238,0,4,255,0,5,187,0,6,204,0,7,255,0,8,221,0,9,221,0,10,221,1,3,255,1,8,238,2,3,255,2,8,255,3,3,238,3,8,238,4,4,238,4,5,255,4,6,255,4,7,238],"secondary":false},{"width":7,"bonus":90,"chr":"q","pixels":[0,5,187,0,6,187,1,3,170,1,4,153,1,7,153,1,8,170,2,3,255,2,8,255,3,3,238,3,8,238,4,3,255,4,4,255,4,5,187,4,6,187,4,7,255,4,8,238,4,9,221,4,10,221],"secondary":false},{"width":4,"bonus":45,"chr":"r","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,3,187,1,4,204,2,3,255],"secondary":false},{"width":6,"bonus":50,"chr":"s","pixels":[0,4,187,1,3,255,1,5,238,1,8,255,2,3,255,2,8,255,3,3,255,3,6,238,3,8,255,4,7,187],"secondary":false},{"width":5,"bonus":45,"chr":"t","pixels":[1,2,221,1,3,255,1,4,221,1,5,221,1,6,221,1,7,170,2,3,255,2,8,238,3,8,153],"secondary":false},{"width":6,"bonus":70,"chr":"u","pixels":[0,3,204,0,4,221,0,5,221,0,6,221,0,7,170,1,8,238,2,8,255,3,8,204,4,3,204,4,4,221,4,5,221,4,6,204,4,7,255,4,8,221],"secondary":false},{"width":6,"bonus":50,"chr":"v","pixels":[0,3,238,1,5,238,1,6,204,2,7,255,2,8,255,3,5,153,3,6,255,3,7,153,4,3,238,4,4,204],"secondary":false},{"width":10,"bonus":95,"chr":"w","pixels":[1,3,153,1,4,238,1,5,187,2,6,153,2,7,238,2,8,187,3,6,204,3,7,238,3,8,153,4,3,170,4,4,255,5,4,221,5,5,221,6,7,255,6,8,221,7,6,238,7,7,204,8,3,238,8,4,204],"secondary":false},{"width":6,"bonus":55,"chr":"x","pixels":[0,8,170,1,3,170,1,4,204,1,7,221,2,5,255,2,6,238,3,4,255,3,6,187,3,7,187,4,3,221,4,8,255],"secondary":false},{"width":6,"bonus":65,"chr":"y","pixels":[0,3,255,0,4,153,0,11,221,1,5,204,1,6,221,1,11,187,2,7,187,2,8,255,2,9,238,3,6,238,3,7,187,4,3,204,4,4,221],"secondary":false},{"width":6,"bonus":70,"chr":"z","pixels":[0,3,153,0,8,204,1,3,255,1,7,221,1,8,255,2,3,255,2,6,255,2,8,255,3,3,255,3,4,170,3,5,170,3,8,255,4,3,255,4,8,255],"secondary":false},{"width":8,"bonus":85,"chr":"A","pixels":[0,8,153,1,6,221,1,7,238,2,3,170,2,4,255,2,5,187,2,6,255,3,1,255,3,2,255,3,6,255,4,2,255,4,3,238,4,6,255,5,5,255,5,6,255,6,7,187,6,8,255],"secondary":false},{"width":7,"bonus":125,"chr":"B","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,4,255,1,8,255,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,1,221,4,4,255,4,5,170,4,8,204,5,2,170,5,3,170,5,6,187,5,7,153],"secondary":false},{"width":9,"bonus":80,"chr":"C","pixels":[0,4,187,0,5,187,1,2,221,1,3,153,1,6,153,1,7,204,2,1,170,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,170,6,8,170],"secondary":false},{"width":8,"bonus":100,"chr":"D","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,8,255,2,1,255,2,8,255,3,1,255,3,8,255,4,1,204,4,8,204,5,2,221,5,7,221,6,4,187,6,5,187],"secondary":false},{"width":6,"bonus":95,"chr":"E","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,1,8,255,2,1,255,2,5,255,2,8,255,3,1,255,3,5,255,3,8,255,4,1,153,4,8,221],"secondary":false},{"width":6,"bonus":70,"chr":"F","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255],"secondary":false},{"width":9,"bonus":105,"chr":"G","pixels":[0,4,170,0,5,187,1,2,204,1,3,153,1,7,221,2,1,170,2,8,187,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,238,6,1,170,6,5,255,6,7,153,6,8,170,7,5,153,7,6,221,7,7,221,7,8,204],"secondary":false},{"width":8,"bonus":105,"chr":"H","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,5,255,2,5,255,3,5,255,4,5,255,5,5,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],"secondary":false},{"width":4,"bonus":60,"chr":"I","pixels":[0,1,192,0,8,191,1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,2,1,192,2,8,191],"secondary":false},{"width":6,"bonus":70,"chr":"J","pixels":[0,6,153,0,7,153,1,8,204,2,1,221,2,8,255,3,1,255,3,8,204,4,1,204,4,2,221,4,3,221,4,4,221,4,5,221,4,6,221,4,7,153],"secondary":false},{"width":7,"bonus":85,"chr":"K","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,4,255,2,4,255,3,3,221,3,5,170,3,6,204,4,1,204,4,2,153,4,7,238,4,8,153],"secondary":false},{"width":6,"bonus":60,"chr":"L","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,8,255,2,8,255,3,8,255,4,8,255],"secondary":false},{"width":9,"bonus":130,"chr":"M","pixels":[0,1,245,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,1,2,170,1,3,225,2,4,207,2,5,190,3,6,232,4,6,232,5,4,207,5,5,190,6,2,170,6,3,224,7,1,245,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255],"secondary":false},{"width":8,"bonus":110,"chr":"N","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,2,255,2,3,221,3,4,187,3,5,187,4,6,221,5,7,255,6,1,204,6,2,221,6,3,221,6,4,221,6,5,221,6,6,221,6,7,221,6,8,204],"secondary":false},{"width":10,"bonus":110,"chr":"O","pixels":[0,4,187,0,5,170,1,2,204,1,3,153,1,6,170,1,7,204,2,1,153,2,8,153,3,1,255,3,8,255,4,1,255,4,8,255,5,1,255,5,8,255,6,1,153,6,8,153,7,2,204,7,3,153,7,6,170,7,7,204,8,4,187,8,5,170],"secondary":false},{"width":7,"bonus":85,"chr":"P","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,4,1,187,4,5,187,5,3,221],"secondary":false},{"width":9,"bonus":100,"chr":"Q","pixels":[0,4,187,0,5,187,1,2,221,1,6,153,1,7,221,2,1,187,2,8,170,3,1,255,3,8,255,4,1,255,4,8,255,5,1,238,5,8,238,6,2,204,6,7,255,7,3,255,7,4,204,7,5,221,7,6,255,7,8,204],"secondary":false},{"width":7,"bonus":100,"chr":"R","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,1,255,1,5,255,2,1,255,2,5,255,3,1,255,3,5,255,3,6,187,4,2,238,4,3,204,4,4,255,4,7,238,4,8,170],"secondary":false},{"width":6,"bonus":70,"chr":"S","pixels":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,1,255,2,4,170,2,8,255,3,1,255,3,5,255,3,8,255,4,1,170,4,6,221,4,7,238],"secondary":false},{"width":8,"bonus":65,"chr":"T","pixels":[0,1,255,1,1,255,2,1,255,3,1,255,3,2,221,3,3,221,3,4,221,3,5,221,3,6,221,3,7,221,3,8,204,4,1,255,5,1,255],"secondary":false},{"width":8,"bonus":85,"chr":"U","pixels":[0,1,204,0,2,221,0,3,221,0,4,221,0,5,221,0,6,187,1,7,170,2,8,255,3,8,255,4,8,221,5,1,204,5,2,221,5,3,221,5,4,221,5,5,221,5,6,255,5,7,238],"secondary":false},{"width":7,"bonus":70,"chr":"V","pixels":[0,1,255,0,2,187,1,3,153,1,4,255,1,5,153,2,6,187,2,7,238,3,7,255,3,8,204,4,4,204,4,5,238,5,1,170,5,2,255,5,3,153],"secondary":false},{"width":10,"bonus":125,"chr":"W","pixels":[0,1,255,0,2,221,1,4,187,1,5,255,1,6,204,2,7,255,2,8,255,3,3,153,3,4,238,3,5,221,4,1,255,4,2,255,4,3,153,5,3,170,5,4,238,5,5,204,6,7,255,6,8,255,7,4,153,7,5,238,7,6,238,7,7,153,8,1,238,8,2,238,8,3,153],"secondary":false},{"width":7,"bonus":75,"chr":"X","pixels":[0,8,170,1,1,187,1,2,204,1,7,238,2,3,221,2,4,153,2,5,255,2,6,153,3,4,255,3,5,238,4,2,238,4,6,204,4,7,170,5,1,204,5,8,255],"secondary":false},{"width":7,"bonus":55,"chr":"Y","pixels":[0,1,170,1,2,238,2,3,153,2,4,255,3,4,221,3,5,204,3,6,221,3,7,221,3,8,204,4,3,255,5,1,238],"secondary":false},{"width":7,"bonus":75,"chr":"Z","pixels":[0,8,187,1,1,255,1,7,221,1,8,255,2,1,255,2,5,204,2,8,255,3,1,255,3,4,204,3,8,255,4,1,255,4,2,221,4,8,255,5,1,187,5,8,153],"secondary":false},{"width":7,"bonus":90,"chr":"0","pixels":[0,2,153,0,3,221,0,4,255,0,5,255,0,6,238,0,7,170,1,1,187,1,8,204,2,1,187,2,8,187,3,1,221,3,8,204,4,2,170,4,3,255,4,4,187,4,5,187,4,6,238,4,7,170],"secondary":false},{"width":7,"bonus":50,"chr":"1","pixels":[1,8,187,2,1,204,2,2,204,2,3,187,2,4,187,2,5,187,2,6,187,2,7,187,2,8,238,3,8,204],"secondary":false},{"width":7,"bonus":55,"chr":"2","pixels":[1,8,255,2,1,187,2,6,153,2,8,187,3,1,204,3,5,153,3,8,187,4,1,187,4,2,153,4,4,204,4,8,187],"secondary":false},{"width":7,"bonus":50,"chr":"3","pixels":[0,8,204,1,1,187,1,8,187,2,1,187,2,4,187,2,8,204,3,2,221,3,3,204,3,5,204,3,7,170],"secondary":false},{"width":7,"bonus":80,"chr":"4","pixels":[0,6,238,1,4,187,1,6,187,2,3,170,2,6,187,3,1,187,3,2,153,3,6,204,4,1,187,4,2,187,4,3,187,4,4,187,4,5,187,4,6,238,4,7,187,4,8,187],"secondary":false},{"width":7,"bonus":70,"chr":"5","pixels":[1,1,238,1,2,187,1,3,187,1,4,187,1,8,204,2,1,187,2,4,187,2,8,187,3,1,187,3,4,204,3,8,204,4,5,238,4,6,187,4,7,221],"secondary":false},{"width":7,"bonus":80,"chr":"6","pixels":[0,3,170,0,4,255,0,5,255,0,6,238,0,7,153,1,2,187,1,8,187,2,1,204,2,4,187,2,8,187,3,1,187,3,4,204,3,8,187,4,5,221,4,6,255,4,7,187],"secondary":false},{"width":7,"bonus":55,"chr":"7","pixels":[0,1,187,1,1,187,1,8,204,2,1,187,2,6,238,2,7,153,3,1,187,3,3,153,3,4,221,4,1,255,4,2,187],"secondary":false},{"width":7,"bonus":95,"chr":"8","pixels":[1,2,238,1,3,221,1,6,204,1,7,221,2,1,204,2,4,204,2,5,170,2,8,221,3,1,187,3,4,170,3,8,187,4,1,221,4,4,170,4,5,204,4,8,187,5,2,170,5,3,153,5,6,238,5,7,238],"secondary":false},{"width":7,"bonus":85,"chr":"9","pixels":[1,2,221,1,3,187,1,4,238,1,8,153,2,1,204,2,5,221,2,8,187,3,1,187,3,5,187,3,8,204,4,1,187,4,7,170,5,2,153,5,3,238,5,4,255,5,5,255,5,6,187],"secondary":false},{"width":8,"bonus":75,"chr":"%","pixels":[0,3,255,0,8,255,1,2,255,1,4,255,1,7,255,2,3,255,2,6,255,3,5,255,4,4,255,4,7,255,5,3,255,5,6,255,5,8,255,6,2,255,6,7,255],"secondary":false},{"width":4,"bonus":40,"chr":"/","pixels":[0,7,153,0,8,238,0,9,221,1,4,187,1,5,238,1,6,170,2,1,221,2,2,221],"secondary":false},{"width":7,"bonus":60,"chr":"+","pixels":[0,5,221,1,5,255,2,5,255,3,2,153,3,3,221,3,4,221,3,5,255,3,6,221,3,7,221,3,8,204,4,5,255,5,5,255],"secondary":false},{"width":5,"bonus":40,"chr":"?","pixels":[0,1,170,1,1,255,1,6,221,1,8,255,2,1,255,2,5,170,3,2,255,3,3,221],"secondary":false},{"width":2,"bonus":35,"chr":"!","pixels":[0,1,170,0,2,187,0,3,187,0,4,187,0,5,187,0,6,170,0,8,255],"secondary":false},{"width":8,"bonus":130,"chr":"@","pixels":[0,4,255,0,5,255,0,6,221,0,7,255,0,8,187,1,3,221,1,9,238,2,2,221,2,5,255,2,6,238,2,7,255,2,10,153,3,2,255,3,4,255,3,8,204,3,10,187,4,2,238,4,4,255,4,8,255,5,3,238,5,4,255,5,5,221,5,6,221,5,7,221,5,8,238,6,8,221],"secondary":false},{"width":8,"bonus":120,"chr":"#","pixels":[0,6,255,1,3,255,1,6,255,1,7,170,1,8,238,2,1,170,2,2,238,2,3,255,2,4,221,2,5,170,2,6,255,3,3,255,3,6,255,4,3,255,4,4,153,4,5,204,4,6,255,4,7,238,4,8,187,5,1,255,5,2,187,5,3,255,5,6,255,6,3,255],"secondary":false},{"width":6,"bonus":70,"chr":"$","pixels":[0,2,153,0,3,170,1,1,204,1,4,221,1,8,238,2,0,204,2,1,238,2,8,238,2,9,204,3,1,238,3,5,238,3,8,255,4,6,170,4,7,170],"secondary":false},{"width":6,"bonus":40,"chr":"^","pixels":[0,4,153,0,5,238,1,2,204,1,3,221,2,1,221,2,2,221,3,3,187,3,4,221],"secondary":false},{"width":6,"bonus":20,"chr":"~","pixels":[1,5,255,2,5,221,3,6,221,4,5,204],"secondary":false},{"width":7,"bonus":95,"chr":"&","pixels":[0,6,187,1,2,238,1,3,255,1,4,187,1,5,187,1,8,187,2,1,255,2,4,255,2,8,255,3,1,255,3,4,255,3,8,255,4,4,255,4,8,187,5,3,204,5,4,255,5,5,221,5,6,187,6,4,153],"secondary":false},{"width":6,"bonus":45,"chr":"*","pixels":[0,2,170,1,2,170,1,3,204,1,4,255,2,1,204,2,2,238,2,3,255,3,2,170,3,4,153],"secondary":false},{"width":4,"bonus":55,"chr":"(","pixels":[0,3,173,0,4,239,0,5,253,0,6,230,0,7,171,1,1,194,1,2,204,1,8,204,1,9,191,2,0,210,2,10,216],"secondary":false},{"width":4,"bonus":55,"chr":")","pixels":[1,0,211,1,10,216,2,1,194,2,2,203,2,8,203,2,9,191,3,3,174,3,4,240,3,5,253,3,6,229,3,7,171],"secondary":false},{"width":7,"bonus":30,"chr":"_","pixels":[0,9,153,1,9,255,2,9,255,3,9,255,4,9,255,5,9,255],"secondary":false},{"width":4,"bonus":15,"chr":"-","pixels":[0,5,255,1,5,255,2,5,255],"secondary":true},{"width":8,"bonus":50,"chr":"=","pixels":[0,4,255,0,6,255,1,4,255,1,6,255,2,4,255,2,6,255,3,4,255,3,6,255,4,4,255,4,6,255],"secondary":false},{"width":3,"bonus":55,"chr":"[","pixels":[0,0,204,0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,204,1,0,238,1,8,238],"secondary":false},{"width":3,"bonus":55,"chr":"]","pixels":[0,0,238,0,8,238,1,0,204,1,1,221,1,2,221,1,3,221,1,4,221,1,5,221,1,6,221,1,7,221,1,8,204],"secondary":false},{"width":5,"bonus":50,"chr":"{","pixels":[0,5,153,1,2,170,1,3,221,1,4,221,1,5,204,1,6,255,1,7,221,1,8,170,2,1,238,2,9,238],"secondary":false},{"width":5,"bonus":50,"chr":"}","pixels":[1,1,238,1,9,238,2,2,170,2,3,221,2,4,221,2,5,204,2,6,255,2,7,221,2,8,170,3,5,153],"secondary":false},{"width":3,"bonus":10,"chr":":","pixels":[1,3,255,1,7,255],"secondary":true},{"width":3,"bonus":20,"chr":";","pixels":[0,9,201,1,3,255,1,7,241,1,8,255],"secondary":true},{"width":3,"bonus":20,"chr":"\\"","pixels":[0,1,255,0,2,255,2,1,255,2,2,255],"secondary":true},{"width":2,"bonus":10,"chr":"\'","pixels":[0,1,255,0,2,177],"secondary":true},{"width":7,"bonus":40,"chr":"<","pixels":[0,5,204,1,5,255,2,4,238,2,6,238,3,4,170,3,6,170,4,3,221,4,7,221],"secondary":false},{"width":7,"bonus":45,"chr":">","pixels":[0,3,204,0,7,204,1,7,187,2,4,238,2,6,255,3,4,170,3,5,153,3,6,204,4,5,255],"secondary":false},{"width":5,"bonus":35,"chr":"\\\\","pixels":[1,1,153,1,2,255,1,3,204,2,5,255,2,6,204,3,8,255,3,9,204],"secondary":false},{"width":2,"bonus":5,"chr":".","pixels":[0,8,255],"secondary":true},{"width":3,"bonus":15,"chr":",","pixels":[0,9,205,1,7,205,1,8,255],"secondary":true},{"width":3,"bonus":50,"chr":"|","pixels":[0,1,221,0,2,221,0,3,221,0,4,221,0,5,221,0,6,221,0,7,221,0,8,221,0,9,221,0,10,204],"secondary":false}],"width":10,"spacewidth":3,"shadow":false,"height":12,"basey":8}'); + +/***/ }), + +/***/ "./src/fonts/aa_8px_mono_allcaps.fontmeta.json": +/*!*****************************************************!*\ + !*** ./src/fonts/aa_8px_mono_allcaps.fontmeta.json ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"chars":[{"width":3,"bonus":35,"chr":"!","pixels":[0,2,170,1,1,221,1,2,255,1,3,221,1,4,187,1,5,170,1,9,204],"secondary":false},{"width":6,"bonus":20,"chr":"\\"","pixels":[1,2,221,1,3,255,3,2,221,3,3,255],"secondary":true},{"width":8,"bonus":125,"chr":"#","pixels":[0,7,187,1,4,255,1,7,255,1,10,170,2,3,170,2,4,255,2,5,255,2,6,221,2,7,255,2,8,170,3,4,255,3,7,255,4,4,255,4,5,153,4,7,255,4,8,238,4,9,255,4,10,204,5,2,238,5,3,204,5,4,255,5,5,153,5,7,255,6,4,255,6,7,153],"secondary":false},{"width":7,"bonus":115,"chr":"$","pixels":[0,8,187,1,2,255,1,3,255,1,4,221,1,9,238,2,1,187,2,4,255,2,5,204,2,8,170,2,9,255,2,10,221,3,0,187,3,1,238,3,2,187,3,3,170,3,4,153,3,5,255,3,6,221,3,9,221,4,1,221,4,6,255,4,7,255,4,8,255],"secondary":false},{"width":12,"bonus":135,"chr":"%","pixels":[1,2,255,1,3,255,1,4,221,2,5,153,3,1,153,3,9,187,4,1,170,4,2,255,4,3,255,4,4,221,4,7,238,4,8,204,5,4,153,5,5,238,5,6,153,6,1,153,6,2,187,6,3,204,6,6,221,6,7,255,6,8,255,7,1,153,7,9,187,8,9,187,9,6,221,9,7,255,9,8,255],"secondary":false},{"width":11,"bonus":190,"chr":"&","pixels":[0,6,187,0,7,255,0,8,170,1,2,204,1,3,255,1,4,153,1,5,238,1,6,170,1,7,187,1,8,255,1,9,153,2,1,170,2,2,153,2,3,153,2,4,255,2,5,187,2,9,238,3,1,221,3,5,238,3,6,170,3,9,255,4,1,238,4,6,238,4,7,153,4,9,204,5,1,187,5,2,187,5,7,255,5,8,204,6,7,170,6,8,255,7,5,238,7,6,255,7,7,170,7,8,170,7,9,221,8,9,238,9,9,153],"secondary":false},{"width":4,"bonus":10,"chr":"\'","pixels":[1,2,204,1,3,255],"secondary":true},{"width":4,"bonus":50,"chr":"(","pixels":[0,3,170,0,4,238,0,5,255,0,6,221,0,7,153,1,1,153,1,2,221,1,3,153,1,7,170,1,8,238],"secondary":false},{"width":4,"bonus":40,"chr":")","pixels":[1,1,170,1,2,221,1,7,170,1,8,238,2,3,187,2,4,238,2,5,255,2,6,204],"secondary":false},{"width":5,"bonus":25,"chr":"*","pixels":[1,1,170,1,2,221,1,3,153,2,2,255,2,3,204],"secondary":false},{"width":8,"bonus":45,"chr":"+","pixels":[1,6,255,2,6,255,3,4,255,3,5,255,3,6,255,3,7,255,3,8,255,4,6,255,5,6,255],"secondary":false},{"width":3,"bonus":10,"chr":",","pixels":[1,8,187,1,9,221],"secondary":true},{"width":5,"bonus":20,"chr":"-","pixels":[0,7,204,1,7,255,2,7,238,3,7,187],"secondary":true},{"width":3,"bonus":5,"chr":".","pixels":[0,9,204],"secondary":true},{"width":7,"bonus":40,"chr":"/","pixels":[0,9,221,1,7,187,1,8,187,2,6,221,3,4,221,4,2,170,4,3,187,5,1,187],"secondary":false},{"width":8,"bonus":105,"chr":"0","pixels":[0,6,153,1,3,221,1,4,255,1,5,255,1,6,255,1,7,255,1,8,238,2,2,187,2,8,153,2,9,204,3,2,187,3,9,204,4,2,221,4,9,187,5,3,238,5,4,255,5,5,255,5,6,255,5,7,255,5,8,221,6,5,153],"secondary":false},{"width":6,"bonus":85,"chr":"1","pixels":[1,3,170,1,9,153,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,3,2,153,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221],"secondary":false},{"width":8,"bonus":100,"chr":"2","pixels":[1,2,187,1,3,153,1,9,255,2,2,187,2,8,221,2,9,255,3,2,221,3,7,221,3,9,255,4,2,187,4,3,238,4,4,187,4,5,238,4,6,238,4,9,255,5,3,221,5,4,255,5,5,170,5,8,153,5,9,238],"secondary":false},{"width":7,"bonus":100,"chr":"3","pixels":[0,2,170,0,8,170,0,9,204,1,2,221,1,9,238,2,2,238,2,5,221,2,9,221,3,2,221,3,3,187,3,4,204,3,5,255,3,6,153,3,9,187,4,3,238,4,4,153,4,6,255,4,7,255,4,8,255,5,7,153],"secondary":false},{"width":8,"bonus":85,"chr":"4","pixels":[0,7,153,1,6,187,1,7,255,2,5,187,2,7,255,3,4,187,3,7,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,7,255,5,9,204,6,7,221],"secondary":false},{"width":7,"bonus":95,"chr":"5","pixels":[0,8,153,0,9,221,1,2,255,1,3,187,1,4,238,1,9,221,2,2,255,2,4,187,2,5,170,2,9,204,3,2,255,3,5,255,3,9,170,4,2,255,4,5,204,4,6,255,4,7,255,4,8,238,5,7,153],"secondary":false},{"width":8,"bonus":105,"chr":"6","pixels":[0,7,153,1,4,153,1,5,255,1,6,255,1,7,255,1,8,255,2,4,204,2,9,221,3,3,170,3,5,153,3,9,204,4,2,153,4,5,187,4,9,204,5,6,238,5,7,170,5,8,187,5,9,153,6,6,187,6,7,255,6,8,170],"secondary":false},{"width":7,"bonus":75,"chr":"7","pixels":[0,2,204,0,3,187,1,2,255,1,9,187,2,2,255,2,7,238,2,8,255,2,9,170,3,2,255,3,5,221,3,6,204,4,2,255,4,3,204,4,4,170,5,2,204],"secondary":false},{"width":8,"bonus":120,"chr":"8","pixels":[1,3,221,1,4,204,1,6,187,1,7,255,1,8,255,2,2,187,2,4,204,2,5,221,2,6,153,2,9,221,3,2,153,3,5,255,3,9,187,4,2,187,4,5,238,4,6,204,4,9,204,5,2,170,5,3,255,5,4,238,5,6,238,5,7,255,5,8,255,6,7,153],"secondary":false},{"width":8,"bonus":95,"chr":"9","pixels":[0,4,153,1,3,255,1,4,255,1,5,255,2,2,187,2,6,153,3,2,204,3,6,153,3,9,153,4,2,221,4,7,153,4,8,204,5,3,255,5,4,255,5,5,255,5,6,255,5,7,187,6,4,153,6,5,153],"secondary":false},{"width":3,"bonus":10,"chr":":","pixels":[0,3,204,0,7,204],"secondary":true},{"width":3,"bonus":20,"chr":";","pixels":[0,2,204,0,6,153,0,7,187,0,8,153],"secondary":true},{"width":7,"bonus":55,"chr":"<","pixels":[0,6,187,0,7,153,1,6,221,1,7,238,2,5,153,3,5,238,3,8,238,4,5,153,4,8,187,5,4,187,5,9,153],"secondary":false},{"width":7,"bonus":60,"chr":"=","pixels":[0,5,255,0,8,255,1,5,255,1,8,255,2,5,255,2,8,255,3,5,255,3,8,255,4,5,255,4,8,255,5,5,221,5,8,221],"secondary":false},{"width":7,"bonus":50,"chr":">","pixels":[0,4,204,0,9,170,1,5,170,1,8,187,2,5,238,2,8,221,3,7,153,4,6,238,4,7,238,5,6,153],"secondary":false},{"width":6,"bonus":65,"chr":"?","pixels":[0,2,153,0,3,187,1,2,221,1,7,221,2,2,238,2,6,238,2,10,204,3,2,204,3,3,221,3,4,204,3,5,255,4,3,238,4,4,221],"secondary":false},{"width":11,"bonus":180,"chr":"@","pixels":[0,4,187,0,5,255,0,6,255,0,7,238,1,3,170,1,8,204,2,5,187,2,6,238,2,7,187,2,9,204,3,4,204,3,5,153,3,6,153,3,7,204,3,9,204,4,3,153,4,6,153,4,9,187,5,0,153,5,3,221,5,4,170,5,5,238,5,6,255,5,7,187,5,9,170,6,3,221,6,4,153,6,7,238,7,1,153,7,7,170,8,1,170,8,2,153,8,6,170,9,3,187,9,4,221,9,5,170],"secondary":false},{"width":9,"bonus":110,"chr":"A","pixels":[1,9,238,2,6,153,2,7,255,2,8,170,2,9,170,3,4,187,3,5,238,3,7,221,4,2,187,4,3,255,4,4,238,4,7,221,5,4,221,5,5,255,5,6,238,5,7,238,6,6,187,6,7,255,6,8,255,6,9,187,7,8,170,7,9,255],"secondary":false},{"width":7,"bonus":150,"chr":"B","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,255,3,2,221,3,5,221,3,9,204,4,2,187,4,3,255,4,4,255,4,5,170,4,6,255,4,7,170,4,8,187,4,9,187,5,6,153,5,7,255,5,8,204],"secondary":false},{"width":8,"bonus":120,"chr":"C","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,3,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,221,5,2,221,5,9,221,6,2,187,6,3,187,6,8,153,6,9,170],"secondary":false},{"width":10,"bonus":165,"chr":"D","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,9,221,4,2,238,4,9,221,5,2,221,5,9,204,6,2,153,6,3,238,6,8,187,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,8,5,187,8,6,170],"secondary":false},{"width":7,"bonus":110,"chr":"E","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,170,2,9,239,3,2,214,3,5,221,3,9,212,4,2,212,4,5,226,4,9,238],"secondary":false},{"width":7,"bonus":100,"chr":"F","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,2,221,3,5,221,4,2,238,4,5,238],"secondary":false},{"width":9,"bonus":135,"chr":"G","pixels":[0,4,170,0,5,238,0,6,255,0,7,187,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,238,5,2,238,5,9,221,6,2,204,6,6,255,6,7,255,6,8,255,6,9,204,7,6,204,7,7,153,7,8,153],"secondary":false},{"width":10,"bonus":175,"chr":"H","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,5,221,4,5,221,5,5,221,6,2,204,6,3,153,6,4,153,6,5,238,6,6,153,6,7,153,6,8,153,6,9,221,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255],"secondary":false},{"width":5,"bonus":80,"chr":"I","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,153,2,9,221],"secondary":false},{"width":6,"bonus":90,"chr":"J","pixels":[2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,187,3,2,204,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,153],"secondary":false},{"width":10,"bonus":140,"chr":"K","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,187,2,7,153,2,8,153,2,9,204,3,5,238,3,6,238,4,6,170,4,7,255,5,2,238,5,3,153,5,7,170,5,8,255,6,2,204,6,8,170,6,9,238,7,9,204],"secondary":false},{"width":7,"bonus":95,"chr":"L","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,9,221,4,9,221,5,9,204],"secondary":false},{"width":12,"bonus":150,"chr":"M","pixels":[1,6,170,1,7,221,1,8,255,1,9,255,2,2,170,2,3,255,2,4,255,2,5,221,3,4,204,3,5,255,3,6,238,4,6,204,4,7,255,4,8,221,5,7,187,5,8,255,6,6,221,7,4,238,7,5,204,8,2,187,8,3,255,8,4,255,8,5,255,8,6,255,8,7,238,8,8,204,8,9,187,9,7,170,9,8,204,9,9,255],"secondary":false},{"width":10,"bonus":130,"chr":"N","pixels":[1,2,204,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,3,221,2,4,238,3,4,221,3,5,238,4,5,238,4,6,238,5,6,238,5,7,238,6,7,238,6,8,238,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,204],"secondary":false},{"width":10,"bonus":155,"chr":"O","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,170,2,8,204,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,238,6,8,170,7,3,238,7,4,255,7,5,255,7,6,255,7,7,255,7,8,187,8,4,153,8,5,221,8,6,204],"secondary":false},{"width":8,"bonus":130,"chr":"P","pixels":[1,1,255,1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,1,238,2,2,153,2,3,153,2,4,153,2,5,170,2,6,153,2,7,153,2,8,153,2,9,221,3,1,204,4,1,238,4,5,187,5,1,153,5,2,255,5,3,255,5,4,255,6,3,153],"secondary":false},{"width":10,"bonus":180,"chr":"Q","pixels":[0,4,153,0,5,238,0,6,238,0,7,170,1,3,221,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,8,221,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,221,6,8,153,6,9,238,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,7,9,187,7,10,153,8,4,153,8,5,204,8,6,204,8,10,255,9,10,204],"secondary":false},{"width":7,"bonus":140,"chr":"R","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,238,2,7,153,2,8,153,2,9,221,3,2,238,3,6,238,4,2,204,4,3,204,4,4,153,4,5,204,4,6,204,4,7,255,5,3,221,5,4,221,5,8,255,6,9,238],"secondary":false},{"width":6,"bonus":115,"chr":"S","pixels":[0,3,221,0,4,238,0,8,187,0,9,187,1,2,187,1,4,204,1,5,255,1,9,238,2,2,187,2,5,255,2,6,187,2,9,221,3,2,204,3,5,153,3,6,255,3,7,170,3,8,153,3,9,170,4,2,204,4,3,153,4,6,170,4,7,255,4,8,187],"secondary":false},{"width":9,"bonus":105,"chr":"T","pixels":[1,2,238,2,2,221,3,2,238,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,2,221,6,2,221,7,2,255],"secondary":false},{"width":10,"bonus":120,"chr":"U","pixels":[1,2,204,1,3,153,1,4,153,1,5,153,1,6,153,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,3,9,221,4,9,238,5,9,221,6,9,170,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,204,8,2,153],"secondary":false},{"width":10,"bonus":90,"chr":"V","pixels":[1,2,255,1,3,153,2,2,238,2,3,255,2,4,255,2,5,187,3,5,238,3,6,255,3,7,221,4,7,221,4,8,255,4,9,187,5,6,187,5,7,204,6,4,221,6,5,187,7,2,255,7,3,170],"secondary":false},{"width":13,"bonus":165,"chr":"W","pixels":[1,2,255,1,3,221,2,2,204,2,3,221,2,4,255,2,5,255,2,6,221,3,6,187,3,7,255,3,8,255,3,9,187,4,6,153,4,7,221,5,4,221,5,5,187,6,2,187,6,3,255,6,4,255,6,5,153,7,4,170,7,5,255,7,6,255,7,7,187,8,7,255,8,8,255,8,9,187,9,5,153,9,6,221,9,7,170,10,2,221,10,3,238,10,4,187,11,2,187],"secondary":false},{"width":9,"bonus":115,"chr":"X","pixels":[1,2,221,1,9,238,2,2,255,2,3,255,2,7,153,2,8,221,2,9,153,3,3,153,3,4,255,3,5,221,3,6,204,4,5,255,4,6,255,4,7,170,5,3,187,5,4,170,5,7,255,5,8,255,5,9,153,6,2,255,6,8,204,6,9,255,7,9,170],"secondary":false},{"width":8,"bonus":95,"chr":"Y","pixels":[0,2,187,1,2,255,1,3,221,2,3,221,2,4,255,2,5,153,3,5,238,3,6,255,3,7,255,3,8,255,3,9,255,4,5,204,4,6,170,4,7,153,4,8,153,4,9,204,5,3,187,5,4,187,6,2,238],"secondary":false},{"width":8,"bonus":105,"chr":"Z","pixels":[0,9,204,1,2,238,1,7,153,1,8,255,1,9,255,2,2,221,2,6,221,2,7,255,2,9,221,3,2,221,3,4,153,3,5,255,3,6,221,3,9,221,4,2,238,4,3,221,4,4,255,4,9,221,5,2,255,5,3,204,5,9,255],"secondary":false},{"width":4,"bonus":65,"chr":"[","pixels":[0,0,255,0,1,255,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,0,9,255,0,10,187,1,0,187,1,10,170],"secondary":false},{"width":8,"bonus":40,"chr":"\\\\","pixels":[1,1,170,1,2,187,2,3,221,3,5,221,4,6,187,4,7,187,5,8,221,6,9,153],"secondary":false},{"width":5,"bonus":65,"chr":"]","pixels":[1,0,153,1,10,153,2,0,255,2,1,255,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,187],"secondary":false},{"width":7,"bonus":40,"chr":"^","pixels":[0,5,204,1,3,238,1,4,170,2,1,238,3,1,221,3,2,204,4,3,187,4,4,238],"secondary":false},{"width":7,"bonus":30,"chr":"_","pixels":[0,10,221,1,10,221,2,10,221,3,10,221,4,10,221,5,10,221],"secondary":false},{"width":9,"bonus":110,"chr":"a","pixels":[1,9,238,2,6,153,2,7,255,2,8,170,2,9,170,3,4,187,3,5,238,3,7,221,4,2,187,4,3,255,4,4,238,4,7,221,5,4,221,5,5,255,5,6,238,5,7,238,6,6,187,6,7,255,6,8,255,6,9,187,7,8,170,7,9,255],"secondary":false},{"width":7,"bonus":150,"chr":"b","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,255,3,2,221,3,5,221,3,9,204,4,2,187,4,3,255,4,4,255,4,5,170,4,6,255,4,7,170,4,8,187,4,9,187,5,6,153,5,7,255,5,8,204],"secondary":false},{"width":8,"bonus":120,"chr":"c","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,3,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,221,5,2,221,5,9,221,6,2,187,6,3,187,6,8,153,6,9,170],"secondary":false},{"width":10,"bonus":165,"chr":"d","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,9,221,4,2,238,4,9,221,5,2,221,5,9,204,6,2,153,6,3,238,6,8,187,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,8,5,187,8,6,170],"secondary":false},{"width":7,"bonus":110,"chr":"e","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,170,2,9,255,3,2,221,3,5,221,3,9,221,4,2,238,4,5,238,4,9,238],"secondary":false},{"width":7,"bonus":100,"chr":"f","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,2,221,3,5,221,4,2,238,4,5,238],"secondary":false},{"width":10,"bonus":135,"chr":"g","pixels":[0,4,170,0,5,238,0,6,255,0,7,187,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,153,2,8,221,2,9,153,3,2,221,3,9,221,4,2,221,4,9,238,5,2,238,5,9,221,6,2,204,6,6,255,6,7,255,6,8,255,6,9,204,7,6,204,7,7,153,7,8,153],"secondary":false},{"width":10,"bonus":175,"chr":"h","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,153,2,7,153,2,8,153,2,9,221,3,5,221,4,5,221,5,5,221,6,2,204,6,3,153,6,4,153,6,5,238,6,6,153,6,7,153,6,8,153,6,9,221,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,255],"secondary":false},{"width":5,"bonus":80,"chr":"i","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,153,2,9,221],"secondary":false},{"width":5,"bonus":90,"chr":"j","pixels":[2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,2,9,255,2,10,255,2,11,187,3,2,204,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,153],"secondary":false},{"width":9,"bonus":140,"chr":"k","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,238,2,6,187,2,7,153,2,8,153,2,9,204,3,5,238,3,6,238,4,6,170,4,7,255,5,2,238,5,3,153,5,7,170,5,8,255,6,2,204,6,8,170,6,9,238,7,9,204],"secondary":false},{"width":7,"bonus":95,"chr":"l","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,204,2,3,153,2,4,153,2,5,153,2,6,153,2,7,153,2,8,170,2,9,255,3,9,221,4,9,221,5,9,204],"secondary":false},{"width":12,"bonus":150,"chr":"m","pixels":[1,6,170,1,7,221,1,8,255,1,9,255,2,2,170,2,3,255,2,4,255,2,5,221,3,4,204,3,5,255,3,6,238,4,6,204,4,7,255,4,8,221,5,7,187,5,8,255,6,6,221,7,4,238,7,5,204,8,2,187,8,3,255,8,4,255,8,5,255,8,6,255,8,7,238,8,8,204,8,9,187,9,7,170,9,8,204,9,9,255],"secondary":false},{"width":10,"bonus":130,"chr":"n","pixels":[1,2,204,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,3,221,2,4,238,3,4,221,3,5,238,4,5,238,4,6,238,5,6,238,5,7,238,6,7,238,6,8,238,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,255,7,9,204],"secondary":false},{"width":10,"bonus":155,"chr":"o","pixels":[0,4,170,0,5,238,0,6,238,0,7,170,1,3,238,1,4,238,1,5,187,1,6,204,1,7,255,1,8,238,2,2,170,2,8,204,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,238,6,8,170,7,3,238,7,4,255,7,5,255,7,6,255,7,7,255,7,8,187,8,4,153,8,5,221,8,6,204],"secondary":false},{"width":7,"bonus":115,"chr":"p","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,170,2,7,153,2,8,153,2,9,221,3,2,221,4,2,221,4,3,204,4,4,153,4,5,221,5,3,221,5,4,221],"secondary":false},{"width":10,"bonus":180,"chr":"q","pixels":[0,4,153,0,5,238,0,6,238,0,7,170,1,3,221,1,4,255,1,5,221,1,6,238,1,7,255,1,8,238,2,2,153,2,8,221,2,9,170,3,2,221,3,9,238,4,2,221,4,9,221,5,2,238,5,9,204,6,2,153,6,3,221,6,8,153,6,9,238,7,3,221,7,4,255,7,5,255,7,6,255,7,7,255,7,8,170,7,9,187,7,10,153,8,4,153,8,5,204,8,6,204,8,10,255,9,10,204],"secondary":false},{"width":9,"bonus":145,"chr":"r","pixels":[1,2,255,1,3,255,1,4,255,1,5,255,1,6,255,1,7,255,1,8,255,1,9,255,2,2,238,2,3,153,2,4,153,2,5,153,2,6,238,2,7,153,2,8,153,2,9,221,3,2,238,3,6,238,4,2,204,4,3,204,4,4,153,4,5,204,4,6,204,4,7,255,5,3,221,5,4,221,5,8,255,6,9,238,7,9,153],"secondary":false},{"width":6,"bonus":115,"chr":"s","pixels":[0,3,221,0,4,238,0,8,187,0,9,187,1,2,187,1,4,204,1,5,255,1,9,238,2,2,187,2,5,255,2,6,187,2,9,221,3,2,204,3,5,153,3,6,255,3,7,170,3,8,153,3,9,170,4,2,204,4,3,153,4,6,170,4,7,255,4,8,187],"secondary":false},{"width":9,"bonus":105,"chr":"t","pixels":[1,2,238,2,2,221,3,2,238,3,3,153,3,4,153,3,5,153,3,6,153,3,7,153,3,8,153,3,9,221,4,2,255,4,3,255,4,4,255,4,5,255,4,6,255,4,7,255,4,8,255,4,9,255,5,2,221,6,2,221,7,2,255],"secondary":false},{"width":10,"bonus":120,"chr":"u","pixels":[1,2,204,1,3,153,1,4,153,1,5,153,1,6,153,2,2,255,2,3,255,2,4,255,2,5,255,2,6,255,2,7,255,2,8,255,3,9,221,4,9,238,5,9,221,6,9,170,7,2,255,7,3,255,7,4,255,7,5,255,7,6,255,7,7,255,7,8,204,8,2,153],"secondary":false},{"width":10,"bonus":90,"chr":"v","pixels":[1,2,255,1,3,153,2,2,238,2,3,255,2,4,255,2,5,187,3,5,238,3,6,255,3,7,221,4,7,221,4,8,255,4,9,187,5,6,187,5,7,204,6,4,221,6,5,187,7,2,255,7,3,170],"secondary":false},{"width":13,"bonus":165,"chr":"w","pixels":[1,2,255,1,3,221,2,2,204,2,3,221,2,4,255,2,5,255,2,6,221,3,6,187,3,7,255,3,8,255,3,9,187,4,6,153,4,7,221,5,4,221,5,5,187,6,2,187,6,3,255,6,4,255,6,5,153,7,4,170,7,5,255,7,6,255,7,7,187,8,7,255,8,8,255,8,9,187,9,5,153,9,6,221,9,7,170,10,2,221,10,3,238,10,4,187,11,2,187],"secondary":false},{"width":9,"bonus":115,"chr":"x","pixels":[1,2,221,1,9,238,2,2,255,2,3,255,2,7,153,2,8,221,2,9,153,3,3,153,3,4,255,3,5,221,3,6,204,4,5,255,4,6,255,4,7,170,5,3,187,5,4,170,5,7,255,5,8,255,5,9,153,6,2,255,6,8,204,6,9,255,7,9,170],"secondary":false},{"width":8,"bonus":95,"chr":"y","pixels":[0,2,187,1,2,255,1,3,221,2,3,221,2,4,255,2,5,153,3,5,238,3,6,255,3,7,255,3,8,255,3,9,255,4,5,204,4,6,170,4,7,153,4,8,153,4,9,204,5,3,187,5,4,187,6,2,238],"secondary":false},{"width":8,"bonus":105,"chr":"z","pixels":[0,9,204,1,2,238,1,7,153,1,8,255,1,9,255,2,2,221,2,6,221,2,7,255,2,9,221,3,2,221,3,4,153,3,5,255,3,6,221,3,9,221,4,2,238,4,3,221,4,4,255,4,9,221,5,2,255,5,3,204,5,9,255],"secondary":false},{"width":4,"bonus":45,"chr":"{","pixels":[1,1,255,1,2,255,1,3,255,1,5,187,1,6,255,1,7,255,1,8,255,1,9,221,2,0,153],"secondary":false},{"width":2,"bonus":60,"chr":"|","pixels":[0,0,255,0,1,255,0,2,255,0,3,255,0,4,255,0,5,255,0,6,255,0,7,255,0,8,255,0,9,255,0,10,255,0,11,255],"secondary":true},{"width":4,"bonus":45,"chr":"}","pixels":[0,0,153,1,1,255,1,2,255,1,3,255,1,5,187,1,6,255,1,7,255,1,8,255,1,9,221],"secondary":false},{"width":7,"bonus":30,"chr":"~","pixels":[0,5,221,1,4,255,2,4,187,3,5,187,4,5,255,5,4,204],"secondary":false}],"width":13,"spacewidth":3,"shadow":false,"height":12,"basey":9}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_63941__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_63941__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __nested_webpack_exports__ = __nested_webpack_require_63941__("./src/dialog/index.ts"); +/******/ +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +/***/ }), + +/***/ "../node_modules/alt1/dist/ocr/index.js": +/*!**********************************************!*\ + !*** ../node_modules/alt1/dist/ocr/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(/*! alt1/base */ "../node_modules/alt1/dist/base/index.js")); + else {} +})(globalThis, (__WEBPACK_EXTERNAL_MODULE_alt1_base__) => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/ocr/index.ts": +/*!**************************!*\ + !*** ./src/ocr/index.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, exports, __nested_webpack_require_728__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.generatefont = exports.readChar = exports.readSmallCapsBackwards = exports.readLine = exports.getChatColor = exports.GetChatColorMono = exports.findReadLine = exports.findChar = exports.decompose3col = exports.decomposeblack = exports.decompose2col = exports.canblend = exports.unblendTrans = exports.unblendKnownBg = exports.unblendBlackBackground = exports.debugFont = exports.debugout = exports.debug = void 0; +const base_1 = __nested_webpack_require_728__(/*! alt1/base */ "alt1/base"); +exports.debug = { + printcharscores: false, + trackread: false +}; +exports.debugout = {}; +/** + * draws the font definition to a buffer and displays it in the dom for debugging purposes + * @param font + */ +function debugFont(font) { + var spacing = font.width + 2; + var buf = new base_1.ImageData(spacing * font.chars.length, font.height + 1); + for (var a = 0; a < buf.data.length; a += 4) { + buf.data[a] = buf.data[a + 1] = buf.data[a + 2] = 0; + buf.data[a + 3] = 255; + } + for (var a = 0; a < font.chars.length; a++) { + var bx = a * spacing; + var chr = font.chars[a]; + for (var b = 0; b < chr.pixels.length; b += (font.shadow ? 4 : 3)) { + buf.setPixel(bx + chr.pixels[b], chr.pixels[b + 1], [chr.pixels[b + 2], chr.pixels[b + 2], chr.pixels[b + 2], 255]); + if (font.shadow) { + buf.setPixel(bx + chr.pixels[b], chr.pixels[b + 1], [chr.pixels[b + 3], 0, 0, 255]); + } + } + } + buf.show(); +} +exports.debugFont = debugFont; +function unblendBlackBackground(img, r, g, b) { + var rimg = new base_1.ImageData(img.width, img.height); + for (var i = 0; i < img.data.length; i += 4) { + var col = decomposeblack(img.data[i], img.data[i + 1], img.data[i + 2], r, g, b); + rimg.data[i + 0] = col[0] * 255; + rimg.data[i + 1] = rimg.data[i + 0]; + rimg.data[i + 2] = rimg.data[i + 0]; + rimg.data[i + 3] = 255; + } + return rimg; +} +exports.unblendBlackBackground = unblendBlackBackground; +/** + * unblends a imagebuffer into match strength with given color + * the bgimg argument should contain a second image with pixel occluded by the font visible. + * @param img + * @param shadow detect black as second color + * @param bgimg optional second image to + */ +function unblendKnownBg(img, bgimg, shadow, r, g, b) { + if (bgimg && (img.width != bgimg.width || img.height != bgimg.height)) { + throw "bgimg size doesn't match"; + } + var rimg = new base_1.ImageData(img.width, img.height); + var totalerror = 0; + for (var i = 0; i < img.data.length; i += 4) { + var col = decompose2col(img.data[i], img.data[i + 1], img.data[i + 2], r, g, b, bgimg.data[i + 0], bgimg.data[i + 1], bgimg.data[i + 2]); + if (shadow) { + if (col[2] > 0.01) { + console.log("high error component: " + (col[2] * 100).toFixed(1) + "%"); + } + totalerror += col[2]; + var m = 1 - col[1] - Math.abs(col[2]); //main color+black=100%-bg-error + rimg.data[i + 0] = m * 255; + rimg.data[i + 1] = col[0] / m * 255; + rimg.data[i + 2] = rimg.data[i + 0]; + } + else { + rimg.data[i + 0] = col[0] * 255; + rimg.data[i + 1] = rimg.data[i + 0]; + rimg.data[i + 2] = rimg.data[i + 0]; + } + rimg.data[i + 3] = 255; + } + return rimg; +} +exports.unblendKnownBg = unblendKnownBg; +/** + * Unblends a font image that is already conpletely isolated to the raw image used ingame. This is the easiest mode for pixel fonts where alpha is 0 or 255, or for extracted font files. + * @param img + * @param r + * @param g + * @param b + * @param shadow whether the font has a black shadow + */ +function unblendTrans(img, shadow, r, g, b) { + var rimg = new base_1.ImageData(img.width, img.height); + var pxlum = r + g + b; + for (var i = 0; i < img.data.length; i += 4) { + if (shadow) { + var lum = img.data[i + 0] + img.data[i + 1] + img.data[i + 2]; + rimg.data[i + 0] = img.data[i + 3]; + rimg.data[i + 1] = lum / pxlum * 255; + rimg.data[i + 2] = rimg.data[i + 0]; + } + else { + rimg.data[i + 0] = img.data[i + 3]; + rimg.data[i + 1] = rimg.data[i + 0]; + rimg.data[i + 2] = rimg.data[i + 0]; + } + rimg.data[i + 3] = 255; + } + return rimg; +} +exports.unblendTrans = unblendTrans; +/** + * Determised wether color [rgb]m can be a result of a blend with color [rgb]1 that is p (0-1) of the mix + * It returns the number that the second color has to lie outside of the possible color ranges + * @param rm resulting color + * @param r1 first color of the mix (the other color is unknown) + * @param p the portion of the [rgb]1 in the mix (0-1) + */ +function canblend(rm, gm, bm, r1, g1, b1, p) { + var m = Math.min(50, p / (1 - p)); + var r = rm + (rm - r1) * m; + var g = gm + (gm - g1) * m; + var b = bm + (bm - b1) * m; + return Math.max(0, -r, -g, -b, r - 255, g - 255, b - 255); +} +exports.canblend = canblend; +/** + * decomposes a color in 2 given component colors and returns the amount of each color present + * also return a third (noise) component which is the the amount leftover orthagonal from the 2 given colors + */ +function decompose2col(rp, gp, bp, r1, g1, b1, r2, g2, b2) { + //get the normal of the error (cross-product of both colors) + var r3 = g1 * b2 - g2 * b1; + var g3 = b1 * r2 - b2 * r1; + var b3 = r1 * g2 - r2 * g1; + //normalize to length 255 + var norm = 255 / Math.sqrt(r3 * r3 + g3 * g3 + b3 * b3); + r3 *= norm; + g3 *= norm; + b3 *= norm; + return decompose3col(rp, gp, bp, r1, g1, b1, r2, g2, b2, r3, g3, b3); +} +exports.decompose2col = decompose2col; +/** + * decomposes a pixel in a given color component and black and returns what proportion of the second color it contains + * this is not as formal as decompose 2/3 and only give a "good enough" number + */ +function decomposeblack(rp, gp, bp, r1, g1, b1) { + var dr = Math.abs(rp - r1); + var dg = Math.abs(gp - g1); + var db = Math.abs(bp - b1); + var maxdif = Math.max(dr, dg, db); + return [1 - maxdif / 255]; +} +exports.decomposeblack = decomposeblack; +/** + * decomposes a color in 3 given component colors and returns the amount of each color present + */ +function decompose3col(rp, gp, bp, r1, g1, b1, r2, g2, b2, r3, g3, b3) { + //P=x*C1+y*C2+z*C3 + //assemble as matrix + //M*w=p + //get inverse of M + //dirty written out version of cramer's rule + var A = g2 * b3 - b2 * g3; + var B = g3 * b1 - b3 * g1; + var C = g1 * b2 - b1 * g2; + var D = b2 * r3 - r2 * b3; + var E = b3 * r1 - r3 * b1; + var F = b1 * r2 - r1 * b2; + var G = r2 * g3 - g2 * r3; + var H = r3 * g1 - g3 * r1; + var I = r1 * g2 - g1 * r2; + var det = r1 * A + g1 * D + b1 * G; + //M^-1*p=w + var x = (A * rp + D * gp + G * bp) / det; + var y = (B * rp + E * gp + H * bp) / det; + var z = (C * rp + F * gp + I * bp) / det; + return [x, y, z]; +} +exports.decompose3col = decompose3col; +/** + * brute force to the exact position of the text + */ +function findChar(buffer, font, col, x, y, w, h) { + if (x < 0) { + return null; + } + if (y - font.basey < 0) { + return null; + } + if (x + w + font.width > buffer.width) { + return null; + } + if (y + h - font.basey + font.height > buffer.height) { + return null; + } + var best = 1000; //TODO finetune score constants + var bestchar = null; + for (var cx = x; cx < x + w; cx++) { + for (var cy = y; cy < y + h; cy++) { + var chr = readChar(buffer, font, col, cx, cy, false, false); + if (chr != null && chr.sizescore < best) { + best = chr.sizescore; + bestchar = chr; + } + } + } + return bestchar; +} +exports.findChar = findChar; +/** + * reads text with unknown exact coord or color. The given coord should be inside the text + * color selection not implemented yet + */ +function findReadLine(buffer, font, cols, x, y, w = -1, h = -1) { + if (w == -1) { + w = font.width + font.spacewidth; + x -= Math.ceil(w / 2); + } + if (h == -1) { + h = 7; + y -= 1; + } + var chr = null; + if (cols.length > 1) { + //TODO use getChatColor() instead for non-mono? + var sorted = GetChatColorMono(buffer, new base_1.Rect(x, y - font.basey, w, h), cols); + //loop until we have a match (max 2 cols) + for (var a = 0; a < 2 && a < sorted.length && chr == null; a++) { + chr = findChar(buffer, font, sorted[a].col, x, y, w, h); + } + } + else { + chr = findChar(buffer, font, cols[0], x, y, w, h); + } + if (chr == null) { + return { debugArea: { x, y, w, h }, text: "", fragments: [] }; + } + return readLine(buffer, font, cols, chr.x, chr.y, true, true); +} +exports.findReadLine = findReadLine; +function GetChatColorMono(buf, rect, colors) { + var colormap = colors.map(c => ({ col: c, score: 0 })); + if (rect.x < 0 || rect.y < 0 || rect.x + rect.width > buf.width || rect.y + rect.height > buf.height) { + return colormap; + } + var data = buf.data; + var maxd = 50; + for (var colobj of colormap) { + var score = 0; + var col = colobj.col; + for (var y = rect.y; y < rect.y + rect.height; y++) { + for (var x = rect.x; x < rect.x + rect.width; x++) { + var i = x * 4 + y * 4 * buf.width; + var d = Math.abs(data[i] - col[0]) + Math.abs(data[i + 1] - col[1]) + Math.abs(data[i + 2] - col[2]); + if (d < maxd) { + score += maxd - d; + } + } + } + colobj.score = score; + } + return colormap.sort((a, b) => b.score - a.score); +} +exports.GetChatColorMono = GetChatColorMono; +function unblend(r, g, b, R, G, B) { + var m = Math.sqrt(r * r + g * g + b * b); + var n = Math.sqrt(R * R + G * G + B * B); + var x = (r * R + g * G + b * B) / n; + var y = Math.sqrt(Math.max(0, m * m - x * x)); + var r1 = Math.max(0, (63.75 - y) * 4); + var r2 = x / n * 255; + if (r2 > 255) //brighter than refcol + { + r1 = Math.max(0, r1 - r2 + 255); + r2 = 255; + } + return [r1, r2]; +} +function getChatColor(buf, rect, colors) { + var bestscore = -1.0; + var best = null; + var b2 = 0.0; + var data = buf.data; + for (let col of colors) { + var score = 0.0; + for (var y = rect.y; y < rect.y + rect.height; y++) { + for (var x = rect.x; x < rect.x + rect.width; x++) { + if (x < 0 || x + 1 >= buf.width) { + continue; + } + if (y < 0 || y + 1 >= buf.width) { + continue; + } + let i1 = buf.pixelOffset(x, y); + let i2 = buf.pixelOffset(x + 1, y + 1); + var pixel1 = unblend(data[i1 + 0], data[i1 + 1], data[i1 + 2], col[0], col[1], col[2]); + var pixel2 = unblend(data[i2 + 0], data[i2 + 1], data[i2 + 2], col[0], col[1], col[2]); + //TODO this is from c# can simplify a bit + var s = (pixel1[0] / 255 * pixel1[1] / 255) * (pixel2[0] / 255 * (255.0 - pixel2[1]) / 255); + score += s; + } + } + if (score > bestscore) { + b2 = bestscore; + bestscore = score; + best = col; + } + else if (score > b2) { + b2 = score; + } + } + //Console.WriteLine("color: " + bestcol + " - " + (bestscore - b2)); + //bestscore /= rect.width * rect.height; + return best; +} +exports.getChatColor = getChatColor; +/** + * reads a line of text with exactly known position and color. y should be the y coord of the text base line, x should be the first pixel of a new character + */ +function readLine(buffer, font, colors, x, y, forward, backward = false) { + if (typeof colors[0] != "number" && colors.length == 1) { + colors = colors[0]; + } + var multicol = typeof colors[0] != "number"; + var allcolors = multicol ? colors : [colors]; + var detectcolor = function (sx, sy, backward) { + var w = Math.floor(font.width * 1.5); + if (backward) { + sx -= w; + } + sy -= font.basey; + return getChatColor(buffer, { x: sx, y: sy, width: w, height: font.height }, allcolors); + }; + var fragments = []; + var x1 = x; + var x2 = x; + var maxspaces = (typeof font.maxspaces == "number" ? font.maxspaces : 1); + let fragtext = ""; + let fraghadprimary = false; + var lastcol = null; + let addfrag = (forward) => { + if (!fragtext) { + return; + } + let frag = { + text: fragtext, + color: lastcol, + index: 0, + xstart: x + (forward ? fragstartdx : fragenddx), + xend: x + (forward ? fragenddx : fragstartdx) + }; + if (forward) { + fragments.push(frag); + } + else { + fragments.unshift(frag); + } + fragtext = ""; + fragstartdx = dx; + fraghadprimary = false; + }; + for (var dirforward of [true, false]) { + //init vars + if (dirforward && !forward) { + continue; + } + if (!dirforward && !backward) { + continue; + } + var dx = 0; + var fragstartdx = dx; + var fragenddx = dx; + var triedspaces = 0; + var triedrecol = false; + var col = multicol ? null : colors; + while (true) { + col = col || detectcolor(x + dx, y, !dirforward); + var chr = (col ? readChar(buffer, font, col, x + dx, y, !dirforward, true) : null); + if (col == null || chr == null) { + if (triedspaces < maxspaces) { + dx += (dirforward ? 1 : -1) * font.spacewidth; + triedspaces++; + continue; + } + if (multicol && !triedrecol && fraghadprimary) { + dx -= (dirforward ? 1 : -1) * triedspaces * font.spacewidth; + triedspaces = 0; + col = null; + triedrecol = true; + continue; + } + if (dirforward) { + x2 = x + dx - font.spacewidth; + } + else { + x1 = x + dx + font.spacewidth; + } + break; + } + else { + if (lastcol && (col[0] != lastcol[0] || col[1] != lastcol[1] || col[2] != lastcol[2])) { + addfrag(dirforward); + } + var spaces = ""; + for (var a = 0; a < triedspaces; a++) { + spaces += " "; + } + if (dirforward) { + fragtext += spaces + chr.chr; + } + else { + fragtext = chr.chr + spaces + fragtext; + } + if (!chr.basechar.secondary) { + fraghadprimary = true; + } + triedspaces = 0; + triedrecol = false; + dx += (dirforward ? 1 : -1) * chr.basechar.width; + fragenddx = dx; + lastcol = col; + } + } + if (lastcol && fraghadprimary) { + addfrag(dirforward); + } + } + fragments.forEach((f, i) => f.index = i); + return { + debugArea: { x: x1, y: y - 9, w: x2 - x1, h: 10 }, + text: fragments.map(f => f.text).join(""), + fragments + }; +} +exports.readLine = readLine; +/** + * Reads a line of text that uses a smallcaps font, these fonts can have duplicate chars that only have a different amount of + * empty space after the char before the next char starts. + * The coordinates should be near the end of the string, or a rectangle with high 1 containing all points where the string can end. + */ +function readSmallCapsBackwards(buffer, font, cols, x, y, w = -1, h = -1) { + if (w == -1) { + w = font.width + font.spacewidth; + x -= Math.ceil(w / 2); + } + if (h == -1) { + h = 7; + y -= 1; + } + var matchedchar = null; + var sorted = (cols.length == 1 ? [{ col: cols[0], score: 1 }] : GetChatColorMono(buffer, new base_1.Rect(x, y - font.basey, w, h), cols)); + //loop until we have a match (max 2 cols) + for (var a = 0; a < 2 && a < sorted.length && matchedchar == null; a++) { + for (var cx = x + w - 1; cx >= x; cx--) { + var best = 1000; //TODO finetune score constants + var bestchar = null; + for (var cy = y; cy < y + h; cy++) { + var chr = readChar(buffer, font, sorted[a].col, cx, cy, true, false); + if (chr != null && chr.sizescore < best) { + best = chr.sizescore; + bestchar = chr; + } + } + if (bestchar) { + matchedchar = bestchar; + break; + } + } + } + if (matchedchar == null) { + return { text: "", debugArea: { x, y, w, h } }; + } + return readLine(buffer, font, cols, matchedchar.x, matchedchar.y, false, true); +} +exports.readSmallCapsBackwards = readSmallCapsBackwards; +/** + * Reads a single character at the exact given location + * @param x exact x location of the start of the character domain (includes part of the spacing between characters) + * @param y exact y location of the baseline pixel of the character + * @param backwards read in backwards direction, the x location should be the first pixel after the character domain in that case + */ +function readChar(buffer, font, col, x, y, backwards, allowSecondary) { + y -= font.basey; + var shiftx = 0; + var shifty = font.basey; + var shadow = font.shadow; + var debugobj = null; + var debugimg = null; + if (exports.debug.trackread) { + var name = x + ";" + y + " " + JSON.stringify(col); + if (!exports.debugout[name]) { + exports.debugout[name] = []; + } + debugobj = exports.debugout[name]; + } + //===== make sure the full domain is inside the bitmap/buffer ====== + if (y < 0 || y + font.height >= buffer.height) { + return null; + } + if (!backwards) { + if (x < 0 || x + font.width > buffer.width) { + return null; + } + } + else { + if (x - font.width < 0 || x > buffer.width) { + return null; + } + } + //====== start reading the char ====== + var scores = []; + for (var chr = 0; chr < font.chars.length; chr++) { + var chrobj = font.chars[chr]; + if (chrobj.secondary && !allowSecondary) { + continue; + } + scores[chr] = { score: 0, sizescore: 0, chr: chrobj }; + var chrx = (backwards ? x - chrobj.width : x); + if (exports.debug.trackread) { + debugimg = new base_1.ImageData(font.width, font.height); + } + for (var a = 0; a < chrobj.pixels.length;) { + var i = (chrx + chrobj.pixels[a]) * 4 + (y + chrobj.pixels[a + 1]) * buffer.width * 4; + var penalty = 0; + if (!shadow) { + penalty = canblend(buffer.data[i], buffer.data[i + 1], buffer.data[i + 2], col[0], col[1], col[2], chrobj.pixels[a + 2] / 255); + a += 3; + } + else { + var lum = chrobj.pixels[a + 3] / 255; + penalty = canblend(buffer.data[i], buffer.data[i + 1], buffer.data[i + 2], col[0] * lum, col[1] * lum, col[2] * lum, chrobj.pixels[a + 2] / 255); + a += 4; + } + scores[chr].score += Math.max(0, penalty); + //TODO add compiler flag to this to remove it for performance + if (debugimg) { + debugimg.setPixel(chrobj.pixels[a], chrobj.pixels[a + 1], [penalty, penalty, penalty, 255]); + } + } + scores[chr].sizescore = scores[chr].score - chrobj.bonus; + if (debugobj) { + debugobj.push({ chr: chrobj.chr, score: scores[chr].sizescore, rawscore: scores[chr].score, img: debugimg }); + } + } + scores.sort((a, b) => a.sizescore - b.sizescore); + if (exports.debug.printcharscores) { + scores.slice(0, 5).forEach(q => console.log(q.chr.chr, q.score.toFixed(3), q.sizescore.toFixed(3))); + } + var winchr = scores[0]; + if (!winchr || winchr.score > 400) { + return null; + } + return { chr: winchr.chr.chr, basechar: winchr.chr, x: x + shiftx, y: y + shifty, score: winchr.score, sizescore: winchr.sizescore }; +} +exports.readChar = readChar; +/** + * Generates a font json description to use in reader functions + * @param unblended A source image with all characters lined up. The image should be unblended into components using the unblend functions + * The lowest pixel line of this image is used to mark the location and size of the charecters if the red component is 255 it means there is a character on that pixel column + * @param chars A string containing all the characters of the image in the same order + * @param seconds A string with characters that are considered unlikely and should only be detected if no other character is possible. + * For example the period (.) character matches positive inside many other characters and should be marked as secondary + * @param bonusses An object that contains bonus scores for certain difficult characters to make the more likely to be red. + * @param basey The y position of the baseline pixel of the font + * @param spacewidth the number of pixels a space takes + * @param treshold minimal color match proportion (0-1) before a pixel is used for the font + * @param shadow whether this font also uses the black shadow some fonts have. The "unblended" image should be unblended correspondingly + * @returns a javascript object describing the font which is used as input for the different read functions + */ +function generatefont(unblended, chars, seconds, bonusses, basey, spacewidth, treshold, shadow) { + //settings vars + treshold *= 255; + //initial vars + var miny = unblended.height - 1; + var maxy = 0; + var font = { chars: [], width: 0, spacewidth: spacewidth, shadow: shadow, height: 0, basey: 0 }; + var ds = false; + var chardata = []; + //index all chars + for (var dx = 0; dx < unblended.width; dx++) { + var i = 4 * dx + 4 * unblended.width * (unblended.height - 1); + if (unblended.data[i] == 255 && unblended.data[i + 3] == 255) { + if (ds === false) { + ds = dx; + } + } + else { + if (ds !== false) { + //char found, start detection + var de = dx; + var char = chars[chardata.length]; + var chr = { + ds: ds, + de: de, + width: de - ds, + chr: char, + bonus: (bonusses && bonusses[char]) || 0, + secondary: seconds.indexOf(chars[chardata.length]) != -1, + pixels: [] + }; + chardata.push(chr); + font.width = Math.max(font.width, chr.width); + for (x = 0; x < de - ds; x++) { + for (y = 0; y < unblended.height - 1; y++) { + var i = (x + ds) * 4 + y * unblended.width * 4; + if (unblended.data[i] >= treshold) { + miny = Math.min(miny, y); + maxy = Math.max(maxy, y); + } + } + } + ds = false; + } + } + } + font.height = maxy + 1 - miny; + font.basey = basey - miny; + //detect all pixels + for (var a in chardata) { + var chr = chardata[a]; + for (var x = 0; x < chr.width; x++) { + for (var y = 0; y < maxy + 1 - miny; y++) { + var i = (x + chr.ds) * 4 + (y + miny) * unblended.width * 4; + if (unblended.data[i] >= treshold) { + chr.pixels.push(x, y); + chr.pixels.push(unblended.data[i]); + if (shadow) { + chr.pixels.push(unblended.data[i + 1]); + } + chr.bonus += 5; + } + } + } + //prevent js from doing the thing with unnecessary output precision + chr.bonus = +chr.bonus.toFixed(3); + font.chars.push({ width: chr.width, bonus: chr.bonus, chr: chr.chr, pixels: chr.pixels, secondary: chr.secondary }); + } + return font; +} +exports.generatefont = generatefont; + + +/***/ }), + +/***/ "alt1/base": +/*!**************************************************************************************************!*\ + !*** external {"root":"A1lib","commonjs2":"alt1/base","commonjs":"alt1/base","amd":"alt1/base"} ***! + \**************************************************************************************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_alt1_base__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_26177__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_26177__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __nested_webpack_exports__ = __nested_webpack_require_26177__("./src/ocr/index.ts"); +/******/ +/******/ return __nested_webpack_exports__; +/******/ })() +; +}); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ var scriptUrl; +/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + ""; +/******/ var document = __webpack_require__.g.document; +/******/ if (!scriptUrl && document) { +/******/ if (document.currentScript) +/******/ scriptUrl = document.currentScript.src; +/******/ if (!scriptUrl) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ if(scripts.length) { +/******/ var i = scripts.length - 1; +/******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src; +/******/ } +/******/ } +/******/ } +/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration +/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic. +/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser"); +/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/"); +/******/ __webpack_require__.p = scriptUrl; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!******************!*\ + !*** ./index.ts ***! + \******************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _modules_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/settings */ "./modules/settings.ts"); +/* harmony import */ var _modules_slayer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/slayer */ "./modules/slayer.ts"); +/* harmony import */ var _modules_dochandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/dochandler */ "./modules/dochandler.ts"); +/* harmony import */ var _extraFeatures__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extraFeatures */ "./extraFeatures.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + + + + +/* COPYRIGHT NOTICE - DO NOT REMOVE + 2021 @ Unlishema Dragonsworn + I have programmed this enitre app myself; however, I must give credit where credit is due. + + The credits have been moved into their own file @ https://unlishema.github.io/slayerassistant/credits.html +*/ +/* + Features coming in the near future (Also my current TODO List) + + ~ Before Release for Sure ~ + Update the about page. (Done but needs adjustment in next release) + Update the changelog page. (Will need updated again on next release) + Update the credits page. (May need more later on) + + ~ Coming Next Release ~ + Adjust histories to use sessionStorage + Add in a status tracking area to keep track of xp/hr, kills/hr, and more (Needs finished) + Add settings into the app finally (Needs rest added) + + ~ Near future Release ~ + Add support for Ushubti + Adjust the caching of the json database files to make sure they get updated timely (use .htaccess and mode_expires.c) + + ~ Settings for the app ~ + Settings: + - Ability to toggle auto find task via dialog (Done) + - Ability to toggle auto find current task via Slayer Count RS3UI (Done) + - Ability to toggle extra info to make box smaller without scrollbar (Done) + - Ability to toggle all hidden creatures + -- Ability to toggle sub-classes of hidden creatures like (elite), (dragonkin lab) and such + - Ability to select default loading + -- Default Task(s) on open and adjust doc based on it (Done) + -- Load previous task(s) and adjust doc based on it + - Ability to select defaults for everything (Later On) + -- Select default creature per task + -- Select default variant per creature + - Ability to customize the Look N Feel of the Slayer Assistant UI (Way Later On) + - Ability to select how long to save search history (Way Later On) + - Ability to select the type of search algo for the app (Maybe Later On) + +*/ +// Check if we are running in alt1 and if so then tell alt1 about the config +if (window.alt1) + alt1.identifyAppUrl("./appconfig.json"); +// Initialize the javascript for the entire app +document.addEventListener("DOMContentLoaded", function (event) { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + // Setup the main document and load assignment index + return [4 /*yield*/, _modules_dochandler__WEBPACK_IMPORTED_MODULE_2__.main.setup.documentMain()]; + case 1: + // Setup the main document and load assignment index + _a.sent(); + // Run the Config Setup Process + _modules_settings__WEBPACK_IMPORTED_MODULE_0__.controller.load(); + // Run the first capture loop and then setup the infinite sec loop + setInterval(function () { _modules_slayer__WEBPACK_IMPORTED_MODULE_1__.findTask(); }, _modules_settings__WEBPACK_IMPORTED_MODULE_0__.controller.data.autoCapture.loopTimer); + return [2 /*return*/]; + } + }); +}); }); +// When we close the app, lets make sure we save the settings +document.addEventListener("beforeunload", function (event) { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + _modules_settings__WEBPACK_IMPORTED_MODULE_0__.controller.save(); + return [2 /*return*/]; + }); +}); }); + +})(); + +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..9811212 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "scripts": { + "prebuild": "node scripts/increment-version.js", + "build": "webpack", + "watch": "webpack --watch", + "preclean": "node scripts/install-rimraf.js", + "clean": "rimraf dist", + "tree": "node scripts/list-directories.js" + }, + "dependencies": { + "acorn": "^8.12.1", + "alt1": "^0.0.1", + "copy-webpack-plugin": "^12.0.2", + "css-loader": "^7.1.2", + "sass-loader": "^16.0.0", + "source-map": "^0.7.4", + "style-loader": "^4.0.0", + "webpack-bundle-analyzer": "^4.10.2" + }, + "devDependencies": { + "@types/node": "^12.12.54", + "sharp": "^0.31.3", + "source-map-explorer": "^2.5.3", + "ts-loader": "^9.5.1", + "typescript": "^5.6.3", + "webpack": "^5.95.0", + "webpack-cli": "^4.10.0" + } +} diff --git a/scripts/increment-version.js b/scripts/increment-version.js new file mode 100644 index 0000000..248789f --- /dev/null +++ b/scripts/increment-version.js @@ -0,0 +1,21 @@ +const fs = require('fs'); +const path = require('path'); + +const versionFilePath = path.resolve(__dirname, '..', 'src/data/version.json'); + +// Read the version file +const versionData = JSON.parse(fs.readFileSync(versionFilePath, 'utf8')); +let [major, minor, patch] = versionData.version.split('.').map(Number); + +// Increment the patch version (or change to minor/major if needed) +patch++; +if (patch >= 256) { minor++; patch = 0; } +if (minor >= 256) { major++; minor = 0; } + +// Update the version data +versionData.version = `${major}.${minor}.${patch}`; + +// Write the updated version back to the file +fs.writeFileSync(versionFilePath, JSON.stringify(versionData, null, 2)); + +console.log(`Updated version to ${versionData.version}`); diff --git a/scripts/install-rimraf.js b/scripts/install-rimraf.js new file mode 100644 index 0000000..f3c985f --- /dev/null +++ b/scripts/install-rimraf.js @@ -0,0 +1,22 @@ +const { exec } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const packageJsonPath = path.resolve(__dirname, '..', 'node_modules', 'rimraf', 'package.json'); + +console.log('Checking package.json path:', packageJsonPath); + +if (!fs.existsSync(packageJsonPath)) { + console.log('rimraf is not installed. Installing...'); + exec('npm install --save-dev rimraf', (error, stdout, stderr) => { + if (error) { + console.error(`Error installing rimraf: ${error.message}`); + return; + } + if (stderr) { + console.error(`Error: ${stderr}`); + return; + } + console.log(stdout); + }); +} diff --git a/scripts/list-directories.js b/scripts/list-directories.js new file mode 100644 index 0000000..f5305be --- /dev/null +++ b/scripts/list-directories.js @@ -0,0 +1,32 @@ +const fs = require('fs'); +const path = require('path'); + +function listDirectories(dir, indent = '') { + const files = fs.readdirSync(dir); + const total = files.length; + + files.forEach((file, index) => { + if (file !== 'node_modules' && file !== '.git') { + const fullPath = path.join(dir, file); + const stats = fs.statSync(fullPath); + const isDirectory = stats.isDirectory(); + + // Determine the prefix to use based on whether it's the last item + let prefix = ''; + if (index === total - 1) { + prefix = isDirectory ? '└── ' : '└── '; + } else { + prefix = isDirectory ? '├── ' : '├── '; + } + + // Print current directory/file with appropriate indentation + console.log(indent + prefix + file); + + if (isDirectory) { + const nextIndent = indent + (index === total - 1 ? ' ' : '│ '); + listDirectories(fullPath, nextIndent); // Recursively list directories + } + } + }); +} +listDirectories(path.join(__dirname, '..')); \ No newline at end of file diff --git a/slayer.unlishema.org.code-workspace b/slayer.unlishema.org.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/slayer.unlishema.org.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/src/appconfig.json b/src/appconfig.json new file mode 100644 index 0000000..ae52cb6 --- /dev/null +++ b/src/appconfig.json @@ -0,0 +1,18 @@ +{ + "appName": "Slayer Assistant", + "description": "Slayer Assistant is your go-to tool for efficient Slayer tasks in RuneScape. Designed for the Alt1 Toolkit, it provides instant access to task information, helping you make informed decisions quickly. Whether you're a new player or an experienced Slayer, this app streamlines the task selection process, making your gameplay smoother and more enjoyable.", + "appUrl": "https://slayer.unlishema.org/", + "configUrl": "https://slayer.unlishema.org/appconfig.json", + "iconUrl": "https://slayer.unlishema.org/images/icon.png", + "defaultWidth": 360, + "defaultHeight": 395, + "minWidth": 360, + "minHeight": 142, + "maxWidth": 400, + "maxHeight": 550, + "requestHandlers": [], + "activators": [ + "regex:^Get task .*" + ], + "permissions": "pixel,gamestate,overlay" +} diff --git a/src/data/.htaccess b/src/data/.htaccess new file mode 100644 index 0000000..6996f3c --- /dev/null +++ b/src/data/.htaccess @@ -0,0 +1,10 @@ +# Enable mod_rewrite +RewriteEngine On + +# Apply rules inside the /data/ folder +RewriteBase /data/ + +# Rewrite any URL ending with .json to load the corresponding .php file +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)\.json$ $1.php [L] diff --git a/src/data/assignments.php b/src/data/assignments.php new file mode 100644 index 0000000..6f7b9a3 --- /dev/null +++ b/src/data/assignments.php @@ -0,0 +1,67 @@ + $message]); + exit; +} + +// Create connection +$mysqli = new mysqli($host, $user, $pass, $db); +if ($mysqli->connect_error) { + respondWithError("Connection failed: " . $mysqli->connect_error); +} + +// Check for the 'q' query parameter +$q = $_GET['q'] ?? 'all'; // Default to 'all' + +// Prepare SQL query +$query = $q === 'all' ? "SELECT * FROM assignments" : "SELECT * FROM assignments WHERE `index` = ?"; +$stmt = $mysqli->prepare($query); +if ($stmt === false) { + respondWithError("Prepare failed: " . $mysqli->error); +} +if ($q !== 'all') { + $stmt->bind_param("s", $q); +} +$stmt->execute(); +$result = $stmt->get_result(); +$data = []; + +// Helper function to process multiline string into array +function parseLines($string) { + return array_filter(array_map('trim', explode("\r\n", $string))); +} + +// Fetch data +while ($row = $result->fetch_assoc()) { + $data[] = [ + 'id' => $row['id'], + 'index' => $row['index'], + 'default-creature' => $row['default_creature'], + 'hidden-creatures' => parseLines($row['hidden_creatures'] ?? ''), + 'alias' => parseLines($row['aliases'] ?? ''), + 'masters' => parseLines($row['masters'] ?? ''), + 'creatures' => parseLines($row['creatures'] ?? ''), + 'equipment' => parseLines($row['equipment'] ?? ''), + 'locations' => parseLines($row['locations'] ?? '') + ]; +} + +// Free the result set +$result->free(); + +// Set the header and output JSON +header('Content-Type: application/json'); +echo json_encode($data, JSON_PRETTY_PRINT); + +// Close the statement and connection +$stmt->close(); +$mysqli->close(); +?> diff --git a/src/data/creatures.php b/src/data/creatures.php new file mode 100644 index 0000000..9913a14 --- /dev/null +++ b/src/data/creatures.php @@ -0,0 +1,97 @@ + $message]); + exit; +} + +// Create connection +$mysqli = new mysqli($host, $user, $pass, $db); +if ($mysqli->connect_error) { + respondWithError("Connection failed: " . $mysqli->connect_error); +} + +// Check for the 'q' query parameter +$q = $_GET['q'] ?? 'all'; // Null coalescing operator for default value + +// Prepare SQL query for creatures and variants +$query = $q === 'all' + ? "SELECT c.*, v.id AS variant_id, v.name AS variant_name, v.image, v.experience, + v.slayer_exp, v.lifepoint_exp, v.level, v.slayer_level, + v.defence, v.lifepoints, v.max_melee, v.max_ranged, + v.max_magic, v.max_necromancy, v.max_spec, v.susceptible, v.weaknesses + FROM creatures c + LEFT JOIN variants v ON c.id = v.creature_id" + : "SELECT c.*, v.id AS variant_id, v.name AS variant_name, v.image, v.experience, + v.slayer_exp, v.lifepoint_exp, v.level, v.slayer_level, + v.defence, v.lifepoints, v.max_melee, v.max_ranged, + v.max_magic, v.max_necromancy, v.max_spec, v.susceptible, v.weaknesses + FROM creatures c + LEFT JOIN variants v ON c.id = v.creature_id WHERE c.name = ?"; + +$stmt = $mysqli->prepare($query); +if ($stmt === false) { + respondWithError("Prepare failed: " . $mysqli->error); +} + +if ($q !== 'all') { + $stmt->bind_param("s", $q); +} + +$stmt->execute(); +$result = $stmt->get_result(); +$data = []; + +// Fetch data +while ($row = $result->fetch_assoc()) { + $creatureId = $row['id']; + // Check if this creature already exists in the data array + if (!isset($data[$creatureId])) { + $data[$creatureId] = [ + 'id' => $row['id'], + 'name' => $row['name'], + 'variants' => [] + ]; + } + + // Check if the row contains variant data + if (isset($row['variant_id'])) { // Ensure variant_id exists + $variant = [ + 'id' => $row['variant_id'], + 'name' => $row['variant_name'], + 'image' => $row['image'], + 'experience' => $row['experience'], + 'slayer-exp' => $row['slayer_exp'], + 'lifepoint-exp' => $row['lifepoint_exp'], + 'level' => $row['level'], + 'slayer-level' => $row['slayer_level'], + 'defence' => $row['defence'], + 'lifepoints' => $row['lifepoints'], + 'max-melee' => $row['max_melee'], + 'max-ranged' => $row['max_ranged'], + 'max-magic' => $row['max_magic'], + 'max-necromancy' => $row['max_necromancy'], + 'max-spec' => $row['max_spec'], + 'susceptible' => explode("\r\n", $row['susceptible'] ?: ''), + 'weakness' => explode("\r\n", $row['weaknesses'] ?: '') + ]; + $data[$creatureId]['variants'][] = $variant; + } +} + +// Output JSON +header('Content-Type: application/json'); +echo json_encode(array_values($data), JSON_PRETTY_PRINT); + +// Free the result set and close the connection +$result->free(); +$stmt->close(); +$mysqli->close(); +?> diff --git a/src/data/masters.php b/src/data/masters.php new file mode 100644 index 0000000..d9a6aed --- /dev/null +++ b/src/data/masters.php @@ -0,0 +1,66 @@ + $message]); + exit; +} + +// Create connection +$mysqli = new mysqli($host, $user, $pass, $db); +if ($mysqli->connect_error) { + respondWithError("Connection failed: " . $mysqli->connect_error); +} + +// Check for the 'q' query parameter and sanitize input +$q = isset($_GET['q']) ? trim($_GET['q']) : 'all'; // Default to 'all' + +// Prepare SQL query with a safeguard against SQL injection +$query = $q === 'all' ? "SELECT * FROM masters" : "SELECT * FROM masters WHERE `name` = ?"; +$stmt = $mysqli->prepare($query); +if ($stmt === false) { + respondWithError("Prepare failed: " . $mysqli->error); +} +if ($q !== 'all') { + $stmt->bind_param("s", $q); +} +$stmt->execute(); +$result = $stmt->get_result(); +$data = []; + +// Fetch data +while ($row = $result->fetch_assoc()) { + $taskCounts = []; + + // Handle empty counts gracefully + $countLines = !empty($row['counts']) ? explode("\r\n", $row['counts']) : []; + + foreach ($countLines as $line) { + if (strpos($line, ':') !== false) { + [$key, $count] = array_map('trim', explode(':', $line, 2)); // Limit to 2 parts + $taskCounts[$key] = $count; + } + } + + $data[] = [ + 'id' => $row['id'], + 'name' => $row['name'], + 'url' => $row['url'], + 'task-counts' => $taskCounts + ]; +} + +// Output JSON +header('Content-Type: application/json'); +echo json_encode($data, JSON_PRETTY_PRINT); + +// Close the connection +$stmt->close(); +$mysqli->close(); +?> diff --git a/src/data/old/assignments.json b/src/data/old/assignments.json new file mode 100644 index 0000000..b474aa5 --- /dev/null +++ b/src/data/old/assignments.json @@ -0,0 +1,3787 @@ +[ + { + "default-creature": "Aberrant spectre#Slayer Tower", + "weakness": [], + "creatures": ["Aberrant spectre"], + "hidden-creatures": [], + "index": "Aberrant spectres", + "alias": [], + "equipment": [ + "Nose peg<\/a>", + "Slayer helmet<\/a>" + ], + "masters": [ + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Pollnivneach Slayer Dungeon<\/a>", + "Slayer Tower<\/a>" + ] + }, + { + "default-creature": "Abyssal demon#Default", + "weakness": [], + "creatures": [ + "Abyssal beast", + "Abyssal demon", + "Abyssal demon (elite)", + "Abyssal lord", + "Abyssal savage" + ], + "hidden-creatures": ["Abyssal demon (elite)"], + "index": "Abyssal Demons", + "alias": ["Abyssal demons"], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Slayer Tower<\/a>", + "Kuradal's Dungeon<\/a>", + "Abyssal Area<\/a>", + "Graveyard of Shadows<\/a>", + "Forinthry Dungeon<\/a>" + ] + }, + { + "default-creature": "Abyssal beast#Default", + "weakness": [], + "creatures": ["Abyssal beast"], + "hidden-creatures": [], + "index": "Abyssal beasts", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Senntisten Asylum<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Abyssal lord#Default", + "weakness": [], + "creatures": ["Abyssal lord"], + "hidden-creatures": [], + "index": "Abyssal lords", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Senntisten Asylum<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Abyssal savage#Asylum", + "weakness": [], + "creatures": ["Abyssal savage"], + "hidden-creatures": [], + "index": "Abyssal savages", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Senntisten Asylum<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Acheron mammoth#Default", + "weakness": [], + "creatures": ["Acheron mammoth"], + "hidden-creatures": [], + "index": "Acheron mammoths", + "alias": ["Acheron mammoth"], + "equipment": [], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Mammoth iceberg<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Adamant dragon#Default", + "weakness": [], + "creatures": ["Adamant dragon"], + "hidden-creatures": [], + "index": "Adamant dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Adamant dragon dungeon<\/a>", + "Dragonkin Lair<\/a>" + ] + }, + { + "default-creature": "Airut#Melee", + "weakness": [], + "creatures": ["Airut"], + "hidden-creatures": [], + "index": "Airut", + "alias": [], + "equipment": [], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Kuradal's Dungeon<\/a>", + "Piscatoris Fishing Colony<\/a>", + "Mazcab<\/a>" + ] + }, + { + "default-creature": "Ankou#Default", + "weakness": [], + "creatures": [ + "Ankou", + "Ankou (Kili's Knowledge IV)", + "Ankou (elite)" + ], + "hidden-creatures": ["Ankou (elite)"], + "index": "Ankou", + "alias": ["Ankous"], + "equipment": [], + "masters": [ + "The Raptor", + "Mazchna" + ], + "locations": [ + "Stronghold of Security<\/a>", + "Wilderness Crater<\/a>" + ] + }, + { + "default-creature": "Aquanite#Default", + "weakness": [], + "creatures": [ + "Aquanite", + "Aquanite (elite)" + ], + "hidden-creatures": ["Aquanite (elite)"], + "index": "Aquanites", + "alias": [], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Fremennik Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Armoured phantom#1", + "weakness": [], + "creatures": ["Armoured phantom"], + "hidden-creatures": [], + "index": "Armoured phantoms", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [ + "Crypt<\/a>", + "Wilderness<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Capsarius#1", + "weakness": [], + "creatures": [ + "Capsarius", + "Gladius", + "Legio Primus", + "Legio Quartus", + "Legio Quintus", + "Legio Secundus", + "Legio Sextus", + "Legio Tertius", + "Rorarius", + "Scutarius" + ], + "hidden-creatures": [], + "index": "Ascension members", + "alias": [], + "equipment": [], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Monastery of Ascension<\/a>"] + }, + { + "default-creature": "Kree'arra#Normal", + "weakness": [], + "creatures": [ + "Aviansie", + "Flight Kilisa", + "Flockleader Geerin", + "Kree'arra", + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior", + "Wingman Skree" + ], + "hidden-creatures": [ + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior" + ], + "index": "Aviansies", + "alias": ["Aviansie"], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "God Wars Dungeon<\/a>", + "[n 3]<\/a><\/sup>" + ] + }, + { + "default-creature": "Banshee#Default", + "weakness": [], + "creatures": [ + "Banshee", + "Mighty banshee" + ], + "hidden-creatures": ["Mighty banshee"], + "index": "Banshees", + "alias": [], + "equipment": [ + "Earmuffs<\/a>", + "Masked earmuffs<\/a>", + "Slayer helmet<\/a>" + ], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": ["Slayer Tower<\/a>"] + }, + { + "default-creature": "Basilisk#Large", + "weakness": [], + "creatures": ["Basilisk"], + "hidden-creatures": [], + "index": "Basilisks", + "alias": [], + "equipment": ["Mirror shield<\/a>"], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "Bat#Default", + "weakness": [], + "creatures": [ + "Albino bat", + "Bat", + "Giant bat", + "Warped bat" + ], + "hidden-creatures": [], + "index": "Bats", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Silvarea<\/a>", + "Morytania<\/a>" + ] + }, + { + "default-creature": "Black bear#Default", + "weakness": [], + "creatures": [ + "Angry bear", + "Bear cub", + "Black bear", + "Grizzly bear", + "Grizzly bear cub" + ], + "hidden-creatures": [ + "Angry bear", + "Bear cub", + "Grizzly bear", + "Grizzly bear cub" + ], + "index": "Bears", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [] + }, + { + "default-creature": "Chicken#White", + "weakness": [], + "creatures": [ + "Bird", + "Chicken", + "Chompy bird", + "Duck", + "Duckling", + "Jubbly bird", + "Mounted terrorbird gnome", + "Oomlie bird", + "Pekin", + "Penguin (monster)", + "Pernicious parrot", + "Rooster", + "Seagull", + "Tenacious toucan", + "Terrorbird", + "Undead chicken", + "Undead pekin" + ], + "hidden-creatures": [ + "Bird", + "Chompy bird", + "Duckling", + "Jubbly bird", + "Mounted terrorbird gnome", + "Oomlie bird", + "Pekin", + "Penguin (monster)", + "Pernicious parrot", + "Rooster", + "Seagull", + "Tenacious toucan", + "Undead chicken", + "Undead pekin" + ], + "index": "Birds", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Jacquelyn" + ], + "locations": [ + "Ape Atoll<\/a>", + "Crash Island<\/a>", + "Life altar<\/a>", + "Nature altar<\/a>" + ] + }, + { + "default-creature": "Black demon#1", + "weakness": [], + "creatures": [ + "Balfrug Kreeyath", + "Black demon" + ], + "hidden-creatures": ["Balfrug Kreeyath"], + "index": "Black demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Edgeville Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Brimhaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Queen Black Dragon#Normal", + "weakness": [], + "creatures": [ + "Alanogard the Black", + "Baby black dragon", + "Black dragon", + "Black dragon (Dragonkin Laboratory)", + "King Black Dragon", + "Queen Black Dragon", + "Verak Lith", + "Verak Little" + ], + "hidden-creatures": [ + "Alanogard the Black", + "Verak Lith", + "Verak Little" + ], + "index": "Black dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "The Raptor", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Lava Maze<\/a>", + "Evil Chicken's Lair<\/a>" + ] + }, + { + "default-creature": "Bloodveld#Default", + "weakness": [], + "creatures": [ + "Bloodveld", + "Bloodveld (God Wars Dungeon)", + "Bloodveld (Heart of Gielinor)", + "Mutated bloodveld" + ], + "hidden-creatures": [], + "index": "Bloodveld", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Slayer Tower<\/a>", + "God Wars Dungeon<\/a>", + "Meiyerditch Dungeon<\/a>" + ] + }, + { + "default-creature": "Blue dragon#1", + "weakness": [], + "creatures": [ + "Baby blue dragon", + "Blue dragon", + "Vorkath" + ], + "hidden-creatures": [], + "index": "Blue dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Kuradal", + "Laniakea" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Ogre Enclave<\/a>", + "Heroes' Guild<\/a>", + "Kuradal's Dungeon<\/a>" + ] + }, + { + "default-creature": "Bound skeleton#1", + "weakness": [], + "creatures": ["Bound skeleton"], + "hidden-creatures": [], + "index": "Bound skeletons", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Fort Forinthry<\/a>"] + }, + { + "default-creature": "Brine rat#Default", + "weakness": [], + "creatures": ["Brine rat"], + "hidden-creatures": [], + "index": "Brine rats", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Brine Rat Cavern<\/a>"] + }, + { + "default-creature": "Bronze dragon#Default", + "weakness": [], + "creatures": ["Bronze dragon"], + "hidden-creatures": [], + "index": "Bronze dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Chaeldar", + "Laniakea" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Camel Warrior#Default", + "weakness": [], + "creatures": ["Camel Warrior"], + "hidden-creatures": [], + "index": "Camel warriors", + "alias": ["Camel Warrior"], + "equipment": [], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Camel Warriors island<\/a>"] + }, + { + "default-creature": "Catablepon#Default", + "weakness": [], + "creatures": ["Catablepon"], + "hidden-creatures": [], + "index": "Catablepon", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": ["Stronghold of Security<\/a>"] + }, + { + "default-creature": "Cave bug#Level 11", + "weakness": [], + "creatures": ["Cave bug"], + "hidden-creatures": [], + "index": "Cave bugs", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Jacquelyn" + ], + "locations": [ + "Burthorpe Slayer Cave<\/a>", + "Chaos Tunnels<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>", + "Lumbridge Swamp Caves<\/a>" + ] + }, + { + "default-creature": "Cave crawler#Level 24", + "weakness": [], + "creatures": ["Cave crawler"], + "hidden-creatures": [], + "index": "Cave crawlers", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Lumbridge Swamp Caves<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "Unspeakable horror#Default", + "weakness": [], + "creatures": [ + "Cave horror", + "Cave horror (elite)", + "Unspeakable horror", + "Unspeakable horror (elite)" + ], + "hidden-creatures": [ + "Cave horror (elite)", + "Unspeakable horror (elite)" + ], + "index": "Cave horrors", + "alias": [], + "equipment": [ + "Witchwood icon<\/a>", + "Light source<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona" + ], + "locations": ["Mos Le'Harmless Caves<\/a>"] + }, + { + "default-creature": "Cave slime#Default", + "weakness": [], + "creatures": [ + "Cave slime", + "Giant slime", + "Laboratory slime" + ], + "hidden-creatures": [ + "Giant slime", + "Laboratory slime" + ], + "index": "Cave slimes", + "alias": ["Cave slime"], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Lumbridge Swamp Caves<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>" + ] + }, + { + "default-creature": "Celestial dragon#Default", + "weakness": [], + "creatures": [ + "Astellarn", + "Celestial dragon", + "Celestial dragon (Dragonkin Laboratory)", + "Elegorn the Celestial" + ], + "hidden-creatures": [ + "Astellarn", + "Celestial dragon (Dragonkin Laboratory)" + ], + "index": "Celestial dragons", + "alias": [], + "equipment": ["Super antifire<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Dragontooth Island resource dungeon<\/a>"] + }, + { + "default-creature": "Chaos Giant#Default", + "weakness": [], + "creatures": ["Chaos Giant"], + "hidden-creatures": [], + "index": "Chaos giants", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Barendir<\/a>"] + }, + { + "default-creature": "Cockatrice#Default", + "weakness": [], + "creatures": ["Cockatrice"], + "hidden-creatures": [], + "index": "Cockatrice", + "alias": ["Cockatrices"], + "equipment": ["Mirror shield<\/a>"], + "masters": ["Mazchna"], + "locations": ["Fremennik Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Cockroach drone#Default", + "weakness": [], + "creatures": [ + "Cockroach drone", + "Cockroach soldier", + "Cockroach worker", + "Warped cockroach" + ], + "hidden-creatures": [], + "index": "Cockroaches", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Lumbridge Catacombs<\/a>", + "Stronghold of Player Safety<\/a>" + ] + }, + { + "default-creature": "Corrupted scorpion#Default", + "weakness": [], + "creatures": [ + "Corrupted dust devil", + "Corrupted kalphite guardian", + "Corrupted kalphite marauder", + "Corrupted lizard", + "Corrupted scarab", + "Corrupted scorpion", + "Corrupted worker" + ], + "hidden-creatures": [], + "index": "Corrupted creatures", + "alias": [ + "Corrupted dust devils", + "Corrupted kalphites", + "Corrupted lizards", + "Corrupted scarabs", + "Corrupted scorpions", + "Corrupted worker" + ], + "equipment": ["Feather of Ma'at<\/a>"], + "masters": [ + "Sumona", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Sophanem Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Cow#Standard (1)", + "weakness": [], + "creatures": [ + "Cow", + "Cow calf", + "Super Cow", + "Undead cow" + ], + "hidden-creatures": [ + "Cow calf", + "Super Cow", + "Undead cow" + ], + "index": "Cows", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Jacquelyn" + ], + "locations": [] + }, + { + "default-creature": "Crawling hand#10a", + "weakness": [], + "creatures": [ + "Crawling hand", + "Skeletal hand", + "Zombie hand" + ], + "hidden-creatures": [ + "Skeletal hand", + "Zombie hand" + ], + "index": "Crawling hands", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Chaeldar" + ], + "locations": [ + "Burthorpe Slayer Cave<\/a>", + "Slayer Tower<\/a>" + ] + }, + { + "default-creature": "Edimmu#Default", + "weakness": [], + "creatures": [ + "Edimmu", + "Edimmu (elite)", + "Frost dragon", + "Kal'gerion demon", + "Seeker", + "Soulgazer" + ], + "hidden-creatures": ["Edimmu (elite)"], + "index": "Creatures of Daemonheim", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": [] + }, + { + "default-creature": "Bulbous crawler#Default", + "weakness": [], + "creatures": [ + "Bulbous crawler", + "Moss golem", + "Vinecrawler" + ], + "hidden-creatures": [], + "index": "Creatures of the Lost Grove", + "alias": ["Lost Grove creatures"], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["The Lost Grove<\/a>"] + }, + { + "default-creature": "Automaton Generator#Post-quest", + "weakness": [], + "creatures": [ + "Automaton Generator", + "Automaton Guardian", + "Automaton Tracer" + ], + "hidden-creatures": [], + "index": "Cres's creations", + "alias": ["Automatons"], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Guthix's Cave<\/a>"] + }, + { + "default-creature": "Crocodile#40", + "weakness": [], + "creatures": [ + "Crocodile", + "Crocodile akh", + "Ol' Sawtooth", + "Sea crocodile" + ], + "hidden-creatures": [ + "Ol' Sawtooth", + "Sea crocodile" + ], + "index": "Crocodiles", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Sumona" + ], + "locations": [ + "Elid<\/a>", + "Kharidian Desert<\/a>" + ] + }, + { + "default-creature": "Crystal Shapeshifter#Magic", + "weakness": [], + "creatures": ["Crystal Shapeshifter"], + "hidden-creatures": [], + "index": "Crystal shapeshifters", + "alias": [], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["Tarddiad<\/a>"] + }, + { + "default-creature": "Cyclops#57 (Crush)", + "weakness": [], + "creatures": [ + "Cyclops", + "Cyclossus" + ], + "hidden-creatures": ["Cyclossus"], + "index": "Cyclopes", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "2nd<\/sup> floor[UK<\/span>]<\/sup><\/span>3rd<\/sup> floor[US<\/span>]<\/sup><\/span><\/span>", + "Warriors' Guild<\/a>", + "Ardougne Zoo<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Dagannoth Rex#Default", + "weakness": [], + "creatures": [ + "Dagannoth (Lighthouse)", + "Dagannoth (Waterbirth Island)", + "Dagannoth (Waterbirth Island, ranged)", + "Dagannoth Prime", + "Dagannoth Rex", + "Dagannoth Supreme", + "Dagannoth fledgeling", + "Dagannoth guardian", + "Dagannoth spawn" + ], + "hidden-creatures": [ + "Dagannoth (Lighthouse)", + "Dagannoth (Waterbirth Island)", + "Dagannoth (Waterbirth Island, ranged)", + "Dagannoth fledgeling", + "Dagannoth guardian", + "Dagannoth spawn" + ], + "index": "Dagannoth", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Chaos Tunnels<\/a>", + "Lighthouse<\/a>", + "Waterbirth Island<\/a>" + ] + }, + { + "default-creature": "Dark beast#19,000 life points", + "weakness": [], + "creatures": [ + "Dark beast", + "Dark beast (elite)", + "Revenant dark beast" + ], + "hidden-creatures": [ + "Dark beast (elite)", + "Revenant dark beast" + ], + "index": "Dark beasts", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Kuradal's Dungeon<\/a>", + "Temple of Light<\/a>" + ] + }, + { + "default-creature": "K'ril Tsutsaroth#Normal", + "weakness": [], + "creatures": [ + "Abyssal beast", + "Abyssal demon", + "Abyssal lord", + "Abyssal savage", + "Balfrug Kreeyath", + "Black demon", + "Cerberus Juvenile", + "Gargoyle", + "Greater demon", + "Greater demon ash lord", + "Greater demon berserker", + "Greater demon brute", + "Greater demon pyromancer", + "Greater demon sage", + "Greater demon savage", + "Imp", + "Imp scavenger", + "K'ril Tsutsaroth", + "Kal'gerion demon", + "Kal'gerion demon (The Shadow Reef)", + "Lesser demon", + "Revenant demon", + "Ripper Demon", + "Tormented demon", + "Tstanon Karlak", + "Yor'Ger the Deceiver", + "Zakl'n Gritch" + ], + "hidden-creatures": [ + "Gargoyle", + "Imp", + "Kal'gerion demon", + "Kal'gerion demon (The Shadow Reef)", + "Tstanon Karlak", + "Yor'Ger the Deceiver", + "Zakl'n Gritch" + ], + "index": "Demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [] + }, + { + "default-creature": "Corrupted lizard#Default", + "weakness": [], + "creatures": [ + "Corrupted lizard", + "Desert Lizard", + "Lizard", + "Small Lizard" + ], + "hidden-creatures": [], + "index": "Desert lizards", + "alias": [], + "equipment": ["Ice cooler<\/a>"], + "masters": [ + "Mazchna", + "Sumona" + ], + "locations": ["Kharidian Desert<\/a>"] + }, + { + "default-creature": "Desert strykewyrm#Default", + "weakness": [], + "creatures": ["Desert strykewyrm"], + "hidden-creatures": [], + "index": "Desert strykewyrms", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Al Kharid<\/a>"] + }, + { + "default-creature": "Ripper dinosaur#Normal", + "weakness": [], + "creatures": [ + "Baby Dinosaur Skeleton", + "Brutish dinosaur", + "Feral Dinosaur", + "Orikalka", + "Osseous", + "Pthentraken", + "Rathis", + "Ripper dinosaur", + "Venomous dinosaur" + ], + "hidden-creatures": [], + "index": "Dinosaurs", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": ["Anachronia<\/a>"] + }, + { + "default-creature": "Jackal#Default", + "weakness": [], + "creatures": [ + "Guard dog", + "Jackal", + "Shadow Hound", + "Wild dog" + ], + "hidden-creatures": [ + "Guard dog", + "Shadow Hound", + "Wild dog" + ], + "index": "Dogs", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Ardougne<\/a>", + "McGrubor's Wood<\/a>", + "Black Arm Gang<\/a>", + "Brimhaven<\/a>", + "Brimhaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Queen Black Dragon#Normal", + "weakness": [], + "creatures": [ + "Adamant dragon", + "Alanogard the Black", + "Astellarn", + "Baby blue dragon", + "Baby red dragon", + "Black dragon", + "Black dragon (Dragonkin Laboratory)", + "Black stone dragon", + "Blue dragon", + "Bronze dragon", + "Brutal green dragon", + "Celestial dragon", + "Celestial dragon (Dragonkin Laboratory)", + "Dragonstone dragon", + "Dragonstone dragon (Dragonkin Laboratory)", + "Elegorn the Celestial", + "Frost dragon", + "Green dragon", + "Hydrix dragon", + "Hydrix dragon (Dragonkin Laboratory)", + "Iron dragon", + "King Black Dragon", + "Mithril dragon", + "Nodon artificer", + "Nodon engineer", + "Nodon guard", + "Nodon hunter", + "Onyx dragon", + "Onyx dragon (Dragonkin Laboratory)", + "Queen Black Dragon", + "Red dragon", + "Red dragon (Dragonkin Laboratory)", + "Rune dragon", + "Sangri the Red", + "Siege engine", + "Steel dragon", + "Verak Lith", + "Verak Little", + "Vorkath" + ], + "hidden-creatures": [], + "index": "Dragons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [] + }, + { + "default-creature": "Corrupted dust devil#Default", + "weakness": [], + "creatures": [ + "Corrupted dust devil", + "Dust devil", + "Dust devil (elite)" + ], + "hidden-creatures": ["Dust devil (elite)"], + "index": "Dust devils", + "alias": [], + "equipment": [ + "Face mask<\/a>", + "Masked earmuffs<\/a>", + "Slayer helmet<\/a>", + "Gas mask<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Smoke Dungeon<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Earth warrior#Default", + "weakness": [], + "creatures": [ + "Earth warrior", + "Earth warrior (elite)" + ], + "hidden-creatures": ["Earth warrior (elite)"], + "index": "Earth warriors", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Edgeville Dungeon<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Edimmu#Default", + "weakness": [], + "creatures": [ + "Edimmu", + "Edimmu (elite)" + ], + "hidden-creatures": ["Edimmu (elite)"], + "index": "Edimmu", + "alias": [], + "equipment": ["Dungeoneering<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Edimmu resource dungeon<\/a>"] + }, + { + "default-creature": "Elf warrior#Melee", + "weakness": [], + "creatures": [ + "Cadarn magus", + "Cadarn ranger", + "Elf warrior", + "Iorwerth guard", + "Iorwerth scout", + "Knight of Ardougne (West Ardougne)", + "Mourner (Mourner Tunnels)", + "Seren archer", + "Seren mage", + "Seren warrior" + ], + "hidden-creatures": [ + "Knight of Ardougne (West Ardougne)", + "Mourner (Mourner Tunnels)", + "Seren archer", + "Seren mage", + "Seren warrior" + ], + "index": "Elves", + "alias": [], + "equipment": [], + "masters": [ + "Chaeldar", + "Sumona", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Lletya<\/a>", + "Elf Camp<\/a>", + "Prifddinas<\/a>", + "Heart of Gielinor<\/a>" + ] + }, + { + "default-creature": "Fetid zombie#1", + "weakness": [], + "creatures": ["Fetid zombie"], + "hidden-creatures": [], + "index": "Fetid zombies", + "alias": [], + "equipment": [], + "masters": ["The Raptor"], + "locations": [ + "crypt<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Fever spider#Default", + "weakness": [], + "creatures": ["Fever spider"], + "hidden-creatures": [], + "index": "Fever spiders", + "alias": [], + "equipment": ["Slayer gloves<\/a>"], + "masters": ["Chaeldar"], + "locations": ["Braindeath Island<\/a>"] + }, + { + "default-creature": "Fire giant#Default", + "weakness": [], + "creatures": ["Fire giant"], + "hidden-creatures": [], + "index": "Fire giants", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Smoke Dungeon<\/a>", + "Resource dungeon<\/a>", + "Waterfall Dungeon<\/a>" + ] + }, + { + "default-creature": "Flesh Crawler#Default", + "weakness": [], + "creatures": ["Flesh Crawler"], + "hidden-creatures": [], + "index": "Fleshcrawlers", + "alias": ["Flesh Crawlers"], + "equipment": [], + "masters": ["Vannaka"], + "locations": ["Stronghold of Security<\/a>"] + }, + { + "default-creature": "Plague frog#Default", + "weakness": [], + "creatures": [ + "Big frog", + "Frog", + "Frogeel", + "Giant frog", + "Plague frog", + "Swamp frog" + ], + "hidden-creatures": [ + "Big frog", + "Frogeel", + "Giant frog" + ], + "index": "Frogs", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Lumbridge Swamp Caves<\/a>", + "Lumbridge Swamp<\/a>", + "Sophanem<\/a>", + "Jade vine maze<\/a>" + ] + }, + { + "default-creature": "Fungal mage#Normal", + "weakness": [], + "creatures": ["Fungal mage"], + "hidden-creatures": [], + "index": "Fungal magi", + "alias": ["Fungal mages"], + "equipment": ["Neem oil<\/a>"], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Ganodermic beast#Normal", + "weakness": [], + "creatures": [ + "Ganodermic beast", + "Ganodermic runt" + ], + "hidden-creatures": [], + "index": "Ganodermic creatures", + "alias": [], + "equipment": ["Neem oil<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Gargoyle#Regular", + "weakness": [], + "creatures": ["Gargoyle"], + "hidden-creatures": [], + "index": "Gargoyles", + "alias": [], + "equipment": ["Rock hammer<\/a>"], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Chaos Tunnels<\/a>", + "Kuradal's Dungeon<\/a>", + "Ruins (east)<\/a>", + "Slayer Tower<\/a>" + ] + }, + { + "default-creature": "Gelatinous abomination#Default", + "weakness": [], + "creatures": ["Gelatinous abomination"], + "hidden-creatures": [], + "index": "Gelatinous abominations", + "alias": [], + "equipment": ["Spiked gloves<\/a>"], + "masters": ["Turael"], + "locations": ["Burthorpe Slayer Cave<\/a>"] + }, + { + "default-creature": "Hydrix dragon#Default", + "weakness": [], + "creatures": [ + "Black stone dragon", + "Dragonstone dragon", + "Dragonstone dragon (Dragonkin Laboratory)", + "Hydrix dragon", + "Hydrix dragon (Dragonkin Laboratory)", + "Onyx dragon", + "Onyx dragon (Dragonkin Laboratory)" + ], + "hidden-creatures": [], + "index": "Gemstone dragons", + "alias": [], + "equipment": ["Super anti-fire potion<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Gemstone cavern<\/a>"] + }, + { + "default-creature": "Ghost#1", + "weakness": [], + "creatures": [ + "Aberrant spectre", + "Ahrim the Blighted", + "Akrisae the Doomed", + "Ankou", + "Banshee", + "Dharok the Wretched", + "Edimmu", + "Edimmu (elite)", + "Ghast", + "Ghost", + "Ghost (Abandoned Mine)", + "Ghost (Ourania Runecrafting Altar)", + "Ghost (Shattered Worlds)", + "Ghost (Spirit of Summer)", + "Ghost (Stronghold of Security)", + "Ghost healer", + "Ghostly troll bruiser", + "Ghostly troll thrower", + "Ghostly warrior", + "Guthan the Infested", + "Karil the Tainted", + "Linza the Disgraced", + "Masuta the Descended", + "Mighty banshee", + "Revenant cyclops", + "Revenant dark beast", + "Revenant demon", + "Revenant dragon", + "Revenant goblin", + "Revenant hellhound", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant knight", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf", + "Risen ghost", + "Shade", + "Shadow warrior", + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior", + "Torag the Corrupted", + "Tormented soul (Uncharted Isles)", + "Tormented wraith", + "Tortured soul (Port Phasmatys)", + "Verac the Defiled", + "Wight", + "Wight (Missing, Presumed Death)", + "Wight ranger", + "Wight ranger (Sliske's Endgame)" + ], + "hidden-creatures": [ + "Edimmu (elite)", + "Ghost (Abandoned Mine)", + "Ghost (Ourania Runecrafting Altar)", + "Ghost (Shattered Worlds)", + "Ghost (Spirit of Summer)", + "Ghost (Stronghold of Security)", + "Revenant cyclops", + "Revenant demon", + "Revenant goblin", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf", + "Tormented soul (Uncharted Isles)", + "Tormented wraith", + "Tortured soul (Port Phasmatys)", + "Wight", + "Wight (Missing, Presumed Death)", + "Wight ranger", + "Wight ranger (Sliske's Endgame)" + ], + "index": "Ghosts", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka", + "The Raptor" + ], + "locations": [ + "Varrock Sewers<\/a>", + "Draynor Manor<\/a>", + "Melzar's Maze<\/a>", + "Stronghold of Security<\/a>", + "Taverley Dungeon<\/a>", + "Tarn's Lair<\/a>", + "Death Altar<\/a>", + "Haunted Mine<\/a>", + "Clan Wars<\/a>", + "Forgotten Cemetery<\/a>" + ] + }, + { + "default-creature": "Ravenous ghoul#Default", + "weakness": [], + "creatures": [ + "Ghoul", + "Ghoul (Paterdomus)", + "Ravenous ghoul", + "Ravenous ghoul (Mazchna)" + ], + "hidden-creatures": [ + "Ghoul (Paterdomus)", + "Ravenous ghoul (Mazchna)" + ], + "index": "Ghouls", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": ["Canifis<\/a>"] + }, + { + "default-creature": "Arch-Glacor#Normal mode", + "weakness": [], + "creatures": [ + "Arch-Glacor", + "Bolstered Glacyte", + "Enduring glacyte", + "Glacor", + "Glacyte", + "Glacyte (Arch-Glacor)", + "Sapping glacyte", + "Unstable glacyte" + ], + "hidden-creatures": [], + "index": "Glacors", + "alias": ["Glacor"], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Glacor Cave<\/a>", + "Glacor front<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Goblin#Level 11", + "weakness": [], + "creatures": [ + "Angry goblin", + "Brokeface", + "Cave goblin (monster)", + "Cave goblin guard", + "Cave goblin miner", + "Goblin", + "Goblin (Goblin Village)", + "Goblin (God Wars Dungeon)", + "Goblin (Stronghold of Security)", + "Guard (cave goblin)", + "Lumpnose", + "Sergeant Grimspike", + "Sergeant Steelwill", + "Sergeant Strongstack", + "Skoblin", + "Stinkears" + ], + "hidden-creatures": [ + "Angry goblin", + "Brokeface", + "Cave goblin (monster)", + "Cave goblin guard", + "Cave goblin miner", + "Guard (cave goblin)", + "Lumpnose", + "Sergeant Grimspike", + "Sergeant Steelwill", + "Sergeant Strongstack", + "Skoblin" + ], + "index": "Goblins", + "alias": [], + "equipment": [], + "masters": ["Jacquelyn"], + "locations": [ + "Lumbridge catacombs<\/a>", + "Goblin Village<\/a>", + "Port Sarim<\/a>", + "Varrock Dig Site<\/a>", + "Stronghold of Security<\/a>", + "Underground Pass<\/a>", + "Goblin Cave<\/a>", + "Coal truck mining site<\/a>", + "God Wars Dungeon<\/a>", + "Observatory<\/a>", + "Gunnarsgrunn<\/a>" + ] + }, + { + "default-creature": "Gorak#God Wars Dungeon", + "weakness": [], + "creatures": ["Gorak"], + "hidden-creatures": [], + "index": "Goraks", + "alias": ["Gorak"], + "equipment": [], + "masters": ["Duradel"], + "locations": [ + "Fairy ring<\/a>", + "D<\/b>I<\/b>R<\/b><\/span>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Greater demon ash lord#Wilderness", + "weakness": [], + "creatures": [ + "Greater demon ash lord", + "Greater demon berserker" + ], + "hidden-creatures": [], + "index": "Greater demon berserkers and ash lords", + "alias": [ + "Greater demon ash lords", + "Greater demon berserkers" + ], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "The Zamorakian Undercity<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "K'ril Tsutsaroth#Normal", + "weakness": [], + "creatures": [ + "Butcher demon", + "Champion of Infernus", + "Chaos Demon", + "Chaos Demon Savage", + "Denizen of Infernus", + "Greater demon", + "Greater demon (elite)", + "Greater demon ash lord", + "Greater demon berserker", + "Greater demon brute", + "Greater demon pyromancer", + "Greater demon sage", + "Greater demon savage", + "K'ril Tsutsaroth", + "Kor'Vath the Blightbringer", + "La'Kalor the Unbroken", + "Shara'Kor the Widowmaker", + "Tstanon Karlak" + ], + "hidden-creatures": [ + "Butcher demon", + "Champion of Infernus", + "Greater demon (elite)" + ], + "index": "Greater demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Entrana Dungeon<\/a>", + "Brimhaven Dungeon<\/a>", + "Ogre Enclave<\/a>", + "Kuradal's Dungeon<\/a>", + "Demonic ruins<\/a>", + "Wilderness Crater<\/a>", + "Lava Maze Dungeon<\/a>" + ] + }, + { + "default-creature": "Green dragon#1", + "weakness": [], + "creatures": [ + "Brutal green dragon", + "Green dragon" + ], + "hidden-creatures": [], + "index": "Green dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "The Raptor", + "Mazchna", + "Laniakea" + ], + "locations": [ + "Chaos tunnels<\/a>", + "Clan Wars<\/a>", + "Goblin Village<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Grifolapine#Normal", + "weakness": [], + "creatures": ["Grifolapine"], + "hidden-creatures": [], + "index": "Grifolapines", + "alias": [], + "equipment": [ + "\"Neem<\/a><\/span><\/span>", + "Neem oil<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Grifolaroo#Normal", + "weakness": [], + "creatures": ["Grifolaroo"], + "hidden-creatures": [], + "index": "Grifolaroos", + "alias": [], + "equipment": [ + "\"Neem<\/a><\/span><\/span>", + "Neem oil<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": ["Polypore Dungeon<\/a>"] + }, + { + "default-creature": "Mature grotworm#Default", + "weakness": [], + "creatures": [ + "Giant worm", + "Grotworm", + "Mature grotworm", + "Young grotworm" + ], + "hidden-creatures": ["Giant worm"], + "index": "Grotworms", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "The Raptor", + "Mazchna", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran" + ], + "locations": ["Grotworm Lair<\/a>"] + }, + { + "default-creature": "Harpie Bug Swarm#Default", + "weakness": [], + "creatures": [ + "Harpie Bug Swarm", + "Harpie Bug Swarm (elite)" + ], + "hidden-creatures": ["Harpie Bug Swarm (elite)"], + "index": "Harpie bug swarms", + "alias": [], + "equipment": ["Bug lantern<\/a>"], + "masters": ["Chaeldar"], + "locations": ["Karamja<\/a>"] + }, + { + "default-creature": "Hellhound#Normal", + "weakness": [], + "creatures": [ + "Cerberus Juvenile", + "Hellhound", + "Hellhound (Heart of Gielinor)", + "Hellhound (The Zamorakian Undercity)", + "Hellhound (summoned)", + "Hellhound Alpha", + "Hellhound Hunter", + "Hellhound Hunter (summoned)", + "Revenant hellhound" + ], + "hidden-creatures": ["Hellhound (Heart of Gielinor)"], + "index": "Hellhounds", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": [ + "Taverley Dungeon<\/a>", + "Deserted Keep<\/a>", + "Witchaven Shrine Dungeon<\/a>", + "God Wars Dungeon<\/a>", + "Kuradal's Dungeon<\/a>", + "Wilderness Crater<\/a>" + ] + }, + { + "default-creature": "Hill Giant#Default", + "weakness": [], + "creatures": ["Hill Giant"], + "hidden-creatures": [], + "index": "Hill giants", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Deep Wilderness Dungeon<\/a>", + "Edgeville Dungeon<\/a>", + "(resource dungeon<\/a>)<\/sup>", + "Gnome Stronghold<\/a>", + "Lava Maze<\/a>", + "Observatory<\/a>", + "Taverley Dungeon<\/a>", + "Tree Gnome Village<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Hobgoblin#Level 15", + "weakness": [], + "creatures": [ + "Hobgoblin", + "Hobgoblin (elite)" + ], + "hidden-creatures": ["Hobgoblin (elite)"], + "index": "Hobgoblins", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Asgarnian Ice Dungeon<\/a>", + "Crandor<\/a>", + "Hobgoblin Peninsula<\/a>", + "Edgeville Dungeon<\/a>", + "God Wars Dungeon<\/a>", + "Rellekka<\/a>", + "Waterbirth Island<\/a>", + "Hobgoblin Mine<\/a>", + "Witchaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Hydrix dragon#Default", + "weakness": [], + "creatures": ["Hydrix dragon"], + "hidden-creatures": [], + "index": "Hydrix dragons", + "alias": [], + "equipment": ["Super anti-fire potion<\/a>"], + "masters": ["Mandrith"], + "locations": [ + "Wilderness (level 47) Lava Maze mine<\/a>", + "Deep Wilderness Dungeon<\/a>" + ] + }, + { + "default-creature": "Ice giant#Level 47 (1)", + "weakness": [], + "creatures": ["Ice giant"], + "hidden-creatures": [], + "index": "Ice giants", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Mazchna" + ], + "locations": [ + "Asgarnian Ice Caves<\/a>", + "Chaos Tunnels<\/a>", + "Frozen Waste Plateau<\/a>", + "White Wolf Mountain<\/a>" + ] + }, + { + "default-creature": "Ice strykewyrm#Default", + "weakness": [], + "creatures": ["Ice strykewyrm"], + "hidden-creatures": [], + "index": "Ice strykewyrms", + "alias": [], + "equipment": ["Fire cape<\/a>"], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Ice strykewyrm cave<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Ice warrior#Normal", + "weakness": [], + "creatures": [ + "Ice warrior", + "Icelord" + ], + "hidden-creatures": ["Icelord"], + "index": "Ice warriors", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Mazchna" + ], + "locations": [ + "White Wolf Mountain<\/a>", + "Frozen Waste Plateau<\/a>", + "Asgarnian Ice Caves<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Icefiend#God Wars Dungeon", + "weakness": [], + "creatures": [ + "Icefiend", + "Icefiend (Ghorrock)", + "Revenant icefiend" + ], + "hidden-creatures": ["Icefiend (Ghorrock)"], + "index": "Icefiends", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": [ + "Ice mountain<\/a>", + "God Wars Dungeon<\/a>", + "Ghorrock<\/a>" + ] + }, + { + "default-creature": "Infernal Mage#Default", + "weakness": [], + "creatures": [ + "Infernal Mage", + "Infernal Mage (elite)" + ], + "hidden-creatures": ["Infernal Mage (elite)"], + "index": "Infernal mages", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": [ + "Slayer Tower<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Iron dragon#Default", + "weakness": [], + "creatures": ["Iron dragon"], + "hidden-creatures": [], + "index": "Iron dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Ghorrock<\/a>", + "Kuradal's Dungeon<\/a>" + ] + }, + { + "default-creature": "Jelly#Default", + "weakness": [], + "creatures": ["Jelly"], + "hidden-creatures": [], + "index": "Jellies", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Soul Wars<\/a>", + "Mahjarrat Ritual Site Cavern<\/a>" + ] + }, + { + "default-creature": "Jungle horror#Default", + "weakness": [], + "creatures": [ + "Jungle horror", + "Quetzathog", + "Sea horror" + ], + "hidden-creatures": [ + "Quetzathog", + "Sea horror" + ], + "index": "Jungle horrors", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Mos Le'Harmless<\/a>"] + }, + { + "default-creature": "Jungle strykewyrm#Default", + "weakness": [], + "creatures": ["Jungle strykewyrm"], + "hidden-creatures": [], + "index": "Jungle strykewyrms", + "alias": [], + "equipment": [], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Laniakea" + ], + "locations": ["South Feldip Hills<\/a>"] + }, + { + "default-creature": "Kal'gerion demon#Bloodchiller", + "weakness": [], + "creatures": [ + "Kal'gerion demon", + "Kal'gerion demon (The Shadow Reef)", + "Yor'Ger the Deceiver" + ], + "hidden-creatures": [], + "index": "Kal'gerion demons", + "alias": ["Kal'gerion demon"], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Kal'gerion resource dungeon<\/a>", + "Demonic Ruins<\/a>" + ] + }, + { + "default-creature": "Corrupted kalphite guardian#Default", + "weakness": [], + "creatures": [ + "Corrupted kalphite guardian", + "Corrupted kalphite marauder", + "Exiled Kalphite Queen", + "Exiled kalphite guardian", + "Exiled kalphite marauder", + "Exiled kalphite paragon", + "Exiled kalphite soldier", + "Exiled kalphite worker", + "Kalphite Guardian", + "Kalphite King", + "Kalphite Queen", + "Kalphite Soldier", + "Kalphite Worker" + ], + "hidden-creatures": [ + "Exiled kalphite guardian", + "Exiled kalphite marauder", + "Exiled kalphite paragon" + ], + "index": "Kalphite", + "alias": ["Kalphites"], + "equipment": [], + "masters": [ + "Vannaka", + "The Raptor", + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Kalphite Lair<\/a>", + "Exiled Kalphite Hive<\/a>" + ] + }, + { + "default-creature": "Killerwatt#Default", + "weakness": [], + "creatures": ["Killerwatt"], + "hidden-creatures": [], + "index": "Killerwatts", + "alias": [], + "equipment": ["Insulated boots<\/a>"], + "masters": ["Mazchna"], + "locations": ["Killerwatt plane<\/a>"] + }, + { + "default-creature": "Kurask#Examine #1", + "weakness": [], + "creatures": ["Kurask"], + "hidden-creatures": [], + "index": "Kurask", + "alias": ["Kurasks"], + "equipment": [ + "Leaf-bladed sword<\/a>", + "Leaf-bladed spear<\/a>", + "Slayer Dart<\/a>", + "Broad arrows<\/a>", + "Broad-tipped bolts<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "Lava strykewyrm#Default", + "weakness": [], + "creatures": [ + "Engorged lava strykewyrm", + "Lava strykewyrm", + "Lava strykewyrm (Dragonkin Laboratory)", + "WildyWyrm (2015, historical)" + ], + "hidden-creatures": [ + "Engorged lava strykewyrm", + "Lava strykewyrm (Dragonkin Laboratory)" + ], + "index": "Lava strykewyrms", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": ["Wilderness<\/a>"] + }, + { + "default-creature": "Lesser demon#1", + "weakness": [], + "creatures": [ + "Lesser demon", + "Lesser demon (Wizards' Tower)", + "Zakl'n Gritch" + ], + "hidden-creatures": [], + "index": "Lesser demons", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Mazchna", + "Chaeldar", + "Laniakea" + ], + "locations": [ + "Wizards' Tower<\/a>", + "Resource dungeon<\/a>", + "Karamja Dungeon<\/a>", + "Crandor<\/a>", + "Melzar's Maze<\/a>", + "Demonic Ruins<\/a>", + "Clan Wars<\/a>", + "Lava Maze<\/a>", + "Wilderness Crater<\/a>" + ] + }, + { + "default-creature": "Living rock patriarch#Default", + "weakness": [], + "creatures": [ + "Living rock patriarch", + "Living rock protector", + "Living rock striker" + ], + "hidden-creatures": [], + "index": "Living rock creatures", + "alias": [], + "equipment": [], + "masters": ["Kuradal"], + "locations": ["Living rock caverns<\/a>"] + }, + { + "default-creature": "Wyvern#Default", + "weakness": [], + "creatures": [ + "Wyvern", + "Wyvern (elite)" + ], + "hidden-creatures": ["Wyvern (elite)"], + "index": "Living wyverns", + "alias": [], + "equipment": [ + "Wyrmfire potion<\/a>", + "Dragonfire shield<\/a>", + "Elemental Workshop shield<\/a>" + ], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Asgarnian Ice Dungeon<\/a>", + "Frozen Waste Plateau<\/a>" + ] + }, + { + "default-creature": "Minotaur#Level 12", + "weakness": [], + "creatures": ["Minotaur"], + "hidden-creatures": [], + "index": "Minotaurs", + "alias": [], + "equipment": [], + "masters": ["Vannaka"], + "locations": ["Stronghold of Security<\/a>"] + }, + { + "default-creature": "Mithril dragon#Default", + "weakness": [], + "creatures": ["Mithril dragon"], + "hidden-creatures": [], + "index": "Mithril dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Ancient Cavern<\/a>"] + }, + { + "default-creature": "Mogre#Default", + "weakness": [], + "creatures": ["Mogre"], + "hidden-creatures": [], + "index": "Mogres", + "alias": [], + "equipment": [ + "Super<\/a>", + "Fishing explosives<\/a>" + ], + "masters": ["Vannaka"], + "locations": ["Mudskipper Point<\/a>"] + }, + { + "default-creature": "Molanisk#Default", + "weakness": [], + "creatures": ["Molanisk"], + "hidden-creatures": [], + "index": "Molanisks", + "alias": [], + "equipment": ["Slayer bell<\/a>"], + "masters": ["Mazchna"], + "locations": ["Dorgesh-Kaan South Dungeon<\/a>"] + }, + { + "default-creature": "Moss giant#Common (1)", + "weakness": [], + "creatures": ["Moss giant"], + "hidden-creatures": [], + "index": "Moss giants", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Mazchna" + ], + "locations": [ + "Brimhaven Dungeon<\/a>", + "Crandor Isle<\/a>", + "Fishing Guild<\/a>", + "Moss Giant Island<\/a>", + "Wilderness<\/a>", + "Varrock Sewers<\/a>", + "Pirates' Cove<\/a>", + "Chaos Tunnels<\/a>", + "Glarial's Tomb<\/a>" + ] + }, + { + "default-creature": "Bladed muspah#Default", + "weakness": [], + "creatures": [ + "Bladed muspah", + "Force muspah", + "Throwing muspah" + ], + "hidden-creatures": [], + "index": "Muspah", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Freneskae<\/a>"] + }, + { + "default-creature": "Mutated jadinko baby#Default", + "weakness": [], + "creatures": [ + "Mutated jadinko baby", + "Mutated jadinko guard", + "Mutated jadinko male" + ], + "hidden-creatures": [], + "index": "Mutated jadinkos", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Jadinko Lair<\/a>"] + }, + { + "default-creature": "Mutated zygomite#Level 58", + "weakness": [], + "creatures": ["Mutated zygomite"], + "hidden-creatures": [], + "index": "Mutated zygomites", + "alias": [], + "equipment": ["Fungicide spray<\/a>"], + "masters": ["Chaeldar"], + "locations": ["Zanaris<\/a>"] + }, + { + "default-creature": "Nechryael#Default", + "weakness": [], + "creatures": [ + "Nechryael", + "Nechryael (Heart of Gielinor)", + "Nechryael (elite)" + ], + "hidden-creatures": [ + "Nechryael (Heart of Gielinor)", + "Nechryael (elite)" + ], + "index": "Nechryael", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal", + "Morvran" + ], + "locations": [ + "Slayer Tower<\/a>", + "Chaos Tunnels<\/a>" + ] + }, + { + "default-creature": "Nightmare#Default", + "weakness": [], + "creatures": ["Nightmare"], + "hidden-creatures": [], + "index": "Nightmare creatures", + "alias": ["Nightmare"], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Freneskae (Ritual Site)<\/a>"] + }, + { + "default-creature": "Blood nihil#normal", + "weakness": [], + "creatures": [ + "Blood nihil", + "Ice nihil", + "Shadow nihil", + "Smoke nihil" + ], + "hidden-creatures": [], + "index": "Nihil", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Freneskae (the Pit)<\/a>"] + }, + { + "default-creature": "Nodon guard#Default", + "weakness": [], + "creatures": [ + "Kerapac, the bound", + "Nodon artificer", + "Nodon enforcer", + "Nodon engineer", + "Nodon guard", + "Nodon hunter", + "Siege engine" + ], + "hidden-creatures": [], + "index": "Nodon dragonkin", + "alias": [], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["Nodon Front<\/a>"] + }, + { + "default-creature": "Enclave guard#Default", + "weakness": [], + "creatures": [ + "Enclave guard", + "Mogre", + "Ogre", + "Ogre chieftain", + "Ogress", + "Ogress champion", + "Ogress warrior", + "Skogre", + "Zogre" + ], + "hidden-creatures": ["Skogre"], + "index": "Ogres", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Yanille<\/a>", + "Castle Wars<\/a>", + "Gu'Tanoth<\/a>", + "Chaos Druid Tower<\/a>", + "Clock Tower Dungeon<\/a>", + "Witchaven Dungeon<\/a>", + "Underground Pass (dungeon)<\/a>", + "Combat Training Camp<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Onyx dragon#Default", + "weakness": [], + "creatures": ["Onyx dragon"], + "hidden-creatures": [], + "index": "Onyx dragons", + "alias": [], + "equipment": ["Super anti-fire potion<\/a>"], + "masters": ["Mandrith"], + "locations": [ + "Gemstone cavern<\/a>", + "Wilderness<\/a>", + "Deep Wilderness Dungeon<\/a>" + ] + }, + { + "default-creature": "Otherworldly being#Default", + "weakness": [], + "creatures": ["Otherworldly being"], + "hidden-creatures": [], + "index": "Otherworldly beings", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": ["Zanaris<\/a>"] + }, + { + "default-creature": "Pyrefiend#Level 38", + "weakness": [], + "creatures": [ + "Pyrefiend", + "Pyrefiend (The Zamorakian Undercity)", + "Pyrefiend (summoned)", + "Revenant pyrefiend", + "Seething Pyrefiend", + "Smoulders", + "Smoulders, the Revenger" + ], + "hidden-creatures": [], + "index": "Pyrefiends", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Smoke Dungeon<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Warped rat#Default", + "weakness": [], + "creatures": [ + "Angry giant rat", + "Brine rat", + "Crypt rat", + "Dungeon rat", + "Giant crypt rat", + "Giant rat", + "Rat", + "Warped rat" + ], + "hidden-creatures": [], + "index": "Rats", + "alias": [], + "equipment": [], + "masters": ["Jacquelyn"], + "locations": [] + }, + { + "default-creature": "Red dragon#1", + "weakness": [], + "creatures": [ + "Baby red dragon", + "Red dragon", + "Red dragon (Dragonkin Laboratory)", + "Sangri the Red" + ], + "hidden-creatures": [ + "Red dragon (Dragonkin Laboratory)", + "Sangri the Red" + ], + "index": "Red dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Sumona", + "Laniakea" + ], + "locations": [ + "Red Dragon Isle<\/a>", + "Brimhaven Dungeon<\/a>" + ] + }, + { + "default-creature": "Revenant cyclops#Default", + "weakness": [], + "creatures": [ + "Revenant cyclops", + "Revenant dark beast", + "Revenant demon", + "Revenant dragon", + "Revenant goblin", + "Revenant hellhound", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant knight", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf" + ], + "hidden-creatures": [], + "index": "Revenants", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": ["Forinthry Dungeon<\/a>"] + }, + { + "default-creature": "Ripper Demon#Default", + "weakness": [], + "creatures": [ + "Ripper Demon", + "Slasher Demon" + ], + "hidden-creatures": ["Slasher Demon"], + "index": "Ripper demons", + "alias": ["Ripper Demon"], + "equipment": [], + "masters": [ + "The Raptor", + "Kuradal", + "Morvran", + "Laniakea", + "Mandrith" + ], + "locations": [ + "Ripper Demon cave<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Risen ghost#Default", + "weakness": [], + "creatures": ["Risen ghost"], + "hidden-creatures": [], + "index": "Risen ghosts", + "alias": ["Risen ghost"], + "equipment": [], + "masters": ["The Raptor"], + "locations": [ + "Crypt (Wilderness)<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Rock slug#Default", + "weakness": [], + "creatures": ["Rock slug"], + "hidden-creatures": [], + "index": "Rockslugs", + "alias": ["Rock slugs"], + "equipment": ["Bag of salt<\/a>"], + "masters": ["Mazchna"], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Lumbridge Swamp Caves<\/a>", + "Dorgesh-Kaan South Dungeon<\/a>" + ] + }, + { + "default-creature": "Rune dragon#Armoured", + "weakness": [], + "creatures": [ + "Elite rune dragon", + "Rune dragon" + ], + "hidden-creatures": ["Elite rune dragon"], + "index": "Rune dragons", + "alias": ["Rune dragon"], + "equipment": ["Super antifire<\/a>"], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": ["Mount Firewake<\/a>"] + }, + { + "default-creature": "Scarab akh#Default", + "weakness": [], + "creatures": [ + "Corrupted scarab", + "Locust lancer", + "Locust ranger", + "Locust rider", + "Scabaras lancer", + "Scabaras mage", + "Scabaras ranger", + "Scarab akh", + "Scarab mage", + "Small scarab" + ], + "hidden-creatures": [], + "index": "Scabarites", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel" + ], + "locations": [ + "Sophanem<\/a>", + "Agility pyramid<\/a>", + "Dealing with Scabaras<\/a>" + ] + }, + { + "default-creature": "Corrupted scorpion#Default", + "weakness": [], + "creatures": [ + "Corrupted scorpion", + "Grave scorpion", + "King Scorpion", + "Pit Scorpion", + "Poison Scorpion", + "Scorpion", + "Scorpion (Ape Atoll)" + ], + "hidden-creatures": [ + "Grave scorpion", + "King Scorpion", + "Pit Scorpion", + "Poison Scorpion", + "Scorpion (Ape Atoll)" + ], + "index": "Scorpions", + "alias": [], + "equipment": [], + "masters": [ + "Vannaka", + "Sumona" + ], + "locations": [ + "Al Kharid mining site<\/a>", + "Dwarven mines<\/a>", + "Ardougne Zoo<\/a>", + "Scorpion Pit<\/a>", + "Stronghold of Security<\/a>", + "Varrock Sewers<\/a>", + "Wilderness<\/a>", + "Karamja Volcano<\/a>" + ] + }, + { + "default-creature": "Sea Snake Hatchling#Default", + "weakness": [], + "creatures": [ + "Sea Snake Hatchling", + "Sea Snake Young" + ], + "hidden-creatures": [], + "index": "Sea snakes", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": ["Miscellania & Etceteria Dungeon<\/a>"] + }, + { + "default-creature": "Shade#Default", + "weakness": [], + "creatures": ["Shade"], + "hidden-creatures": [], + "index": "Shades", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Stronghold of Security<\/a>", + "Mort'ton<\/a>", + "Shade Catacombs<\/a>", + "Temple Trekking<\/a>" + ] + }, + { + "default-creature": "Manifest shadow#Default", + "weakness": [], + "creatures": [ + "Blissful shadow", + "Manifest shadow", + "Shadow (Temple of Light)", + "Truthful shadow" + ], + "hidden-creatures": [], + "index": "Shadow creatures", + "alias": [], + "equipment": [], + "masters": [ + "Morvran", + "Laniakea" + ], + "locations": [ + "Temple of Light<\/a>", + "Prifddinas<\/a>", + "Amlodd Clan<\/a>" + ] + }, + { + "default-creature": "Shadow warrior#Default", + "weakness": [], + "creatures": ["Shadow warrior"], + "hidden-creatures": [], + "index": "Shadow warriors", + "alias": [], + "equipment": [], + "masters": [ + "Mazchna", + "Chaeldar" + ], + "locations": ["Legends' Guild<\/a>"] + }, + { + "default-creature": "Skeletal Wyvern#1", + "weakness": [], + "creatures": ["Skeletal Wyvern"], + "hidden-creatures": [], + "index": "Skeletal wyverns", + "alias": [], + "equipment": [ + "Wyrmfire potion<\/a>", + "Dragonfire shield<\/a>", + "Elemental Workshop shield<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal" + ], + "locations": ["Asgarnian Ice Dungeon<\/a>"] + }, + { + "default-creature": "Skeleton (Lumbridge Catacombs)#Default", + "weakness": [], + "creatures": [ + "Ankou", + "Ankou (elite)", + "Baby Dinosaur Skeleton", + "Bossy McBossFace's First mate", + "Bound skeleton", + "Giant skeleton (Shadow Dungeon)", + "Giant skeleton (Tarn's Lair)", + "Huge skeleton", + "Osseous", + "Skeletal Wyvern", + "Skeletal hand", + "Skeletal miner", + "Skeletal shielder", + "Skeleton", + "Skeleton (Ape Atoll)", + "Skeleton (Barrows)", + "Skeleton (Dark Warriors' Fortress)", + "Skeleton (Heart of Gielinor)", + "Skeleton (Lumbridge Catacombs)", + "Skeleton (Tarn's Lair)", + "Skeleton (Temple Trekking)", + "Skeleton (Ullek)", + "Skeleton (Uncharted Isles)", + "Skeleton Archer", + "Skeleton Mage", + "Skeleton archer (Ancient Awakening)", + "Skeleton brute", + "Skeleton fremennik", + "Skeleton heavy", + "Skeleton hero", + "Skeleton knight", + "Skeleton ranger (Ancient Awakening)", + "Skeleton thug", + "Skeleton warlord", + "Skeleton warrior (Ancient Awakening)", + "Skeleton warrior (Rasial)", + "Skoblin", + "Skogre", + "Summoned skeleton", + "Summoned skeleton archer", + "Training dummy", + "Undead one", + "Warped skeleton" + ], + "hidden-creatures": [ + "Skeletal miner", + "Skeleton (Tarn's Lair)", + "Skeleton (Temple Trekking)", + "Skeleton fremennik", + "Undead one" + ], + "index": "Skeletons", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka", + "The Raptor" + ], + "locations": [ + "Lumbridge Catacombs<\/a>", + "Edgeville Dungeon<\/a>", + "Digsite Dungeon<\/a>", + "Draynor Sewers<\/a>", + "Karamja Volcano<\/a>", + "Ogre Enclave<\/a>", + "Steel Mine<\/a>", + "Stronghold of Security<\/a>", + "Taverley Dungeon<\/a>", + "Temple of Ikov<\/a>", + "Varrock Sewers<\/a>", + "Waterfall Dungeon<\/a>", + "Barrows<\/a>", + "Chaos Tunnels<\/a>", + "Ruins of Ullek<\/a>", + "Melzar's Maze<\/a>", + "Wilderness Crater<\/a>", + "Ape Atoll Dungeon<\/a>", + "Senntisten Temple<\/a>", + "Underground Pass (dungeon)<\/a>", + "crypt<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "The Magister#Default", + "weakness": [], + "creatures": [ + "Crocodile akh", + "Feline akh", + "Gorilla akh", + "Imperial mage akh", + "Imperial ranger akh", + "Imperial warrior akh", + "Oreb, the Magister", + "Salawa akh", + "Scarab akh", + "The Magister" + ], + "hidden-creatures": ["Oreb, the Magister"], + "index": "Soul devourers", + "alias": [ + "Crocodile akh", + "Feline akh", + "Gorilla akh", + "Imperial guard akh", + "Salawa akh", + "Scarab akh", + "Soul devourer" + ], + "equipment": ["Feather of Ma'at<\/a>"], + "masters": [ + "Sumona", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Sophanem Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Soulgazer#Default", + "weakness": [], + "creatures": [ + "Soulgazer", + "Soulgazer (elite)" + ], + "hidden-creatures": ["Soulgazer (elite)"], + "index": "Soulgazers", + "alias": [], + "equipment": [], + "masters": ["Mandrith"], + "locations": [ + "Stalker Dungeon<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Deadly red spider#Default", + "weakness": [], + "creatures": [ + "Corpse spider", + "Crypt spider", + "Deadly red spider", + "Fever spider", + "Giant crypt spider", + "Giant spider", + "Ice spider", + "Jungle spider", + "Lava spider", + "Poison spider", + "Shadow spider", + "Spider", + "Spyndra" + ], + "hidden-creatures": [], + "index": "Spiders", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka" + ], + "locations": [ + "Melzar's Maze<\/a>", + "Sorceress<\/a>", + "Lumbridge Castle<\/a>", + "Stronghold of Security<\/a>", + "Ape Atoll<\/a>", + "Ogre Enclave<\/a>", + "Wilderness<\/a>", + "Karamja<\/a>", + "Underground Pass<\/a>" + ] + }, + { + "default-creature": "Spiritual mage#Armadyl", + "weakness": [], + "creatures": ["Spiritual mage"], + "hidden-creatures": [], + "index": "Spiritual mages", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Duradel", + "Kuradal" + ], + "locations": ["God Wars Dungeon<\/a>"] + }, + { + "default-creature": "Spiritual warrior#Armadyl", + "weakness": [], + "creatures": ["Spiritual warrior"], + "hidden-creatures": [], + "index": "Spiritual warriors", + "alias": [], + "equipment": [], + "masters": ["Sumona"], + "locations": ["God Wars Dungeon<\/a>"] + }, + { + "default-creature": "Veil-ripper Ozharakha#Default", + "weakness": [], + "creatures": [ + "Seeker", + "Soulgazer", + "Soulgazer (elite)", + "Veil-ripper Ozharakha" + ], + "hidden-creatures": ["Soulgazer (elite)"], + "index": "Stalker creatures", + "alias": [], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Stalker dungeon<\/a>", + "Wilderness<\/a>" + ] + }, + { + "default-creature": "Steel dragon#Default", + "weakness": [], + "creatures": ["Steel dragon"], + "hidden-creatures": [], + "index": "Steel dragons", + "alias": [], + "equipment": [ + "Anti-dragon shield<\/a>", + "Dragonfire shield<\/a>", + "Antifire potion<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Kuradal's Dungeon<\/a>", + "Brimhaven Dungeon<\/a>", + "Ghorrock<\/a>" + ] + }, + { + "default-creature": "Desert strykewyrm#Default", + "weakness": [], + "creatures": [ + "Desert strykewyrm", + "Ice strykewyrm", + "Jungle strykewyrm", + "Lava strykewyrm", + "Lava strykewyrm (Dragonkin Laboratory)", + "WildyWyrm (2015, historical)" + ], + "hidden-creatures": ["WildyWyrm (2015, historical)"], + "index": "Strykewyrms", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": [] + }, + { + "default-creature": "Suqah#Level 73 (Dual wielding swords)", + "weakness": [], + "creatures": ["Suqah"], + "hidden-creatures": [], + "index": "Suqahs", + "alias": ["Suqah"], + "equipment": [ + "Seal of passage<\/a>", + "Moon Clan<\/a>" + ], + "masters": [ + "Duradel", + "Kuradal" + ], + "locations": ["Lunar Isle<\/a>"] + }, + { + "default-creature": "Terror dog#Level 61", + "weakness": [], + "creatures": ["Terror dog"], + "hidden-creatures": [], + "index": "Terror dogs", + "alias": [], + "equipment": [], + "masters": [ + "Sumona", + "Kuradal" + ], + "locations": ["Tarn's Lair<\/a>"] + }, + { + "default-creature": "Tormented demon#Standard", + "weakness": [], + "creatures": ["Tormented demon"], + "hidden-creatures": [], + "index": "Tormented demons", + "alias": ["Tormented demon"], + "equipment": ["Slayer master<\/a>"], + "masters": [ + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": ["Ancient Guthix Temple<\/a>"] + }, + { + "default-creature": "Ice troll runt#Default", + "weakness": [], + "creatures": [ + "Ghostly troll bruiser", + "Ghostly troll thrower", + "Ice troll", + "Ice troll female", + "Ice troll grunt", + "Ice troll male", + "Ice troll runt", + "Kraka", + "Mountain troll", + "Mountain troll (well)", + "Pee Hat", + "River troll", + "Rock (monster)", + "Stick", + "Stove", + "Thrower Troll", + "Troll brute", + "Troll brute (Davendale)", + "Troll chucker", + "Troll chucker (Davendale)", + "Troll general", + "Troll lout", + "Troll shaman", + "Troll shaman (Davendale)", + "Troll spectator", + "Undead troll" + ], + "hidden-creatures": [ + "Mountain troll (well)", + "Stove", + "Troll brute (Davendale)" + ], + "index": "Trolls", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Mountain trolls<\/a>", + "Trollheim<\/a>", + "Keldagrim<\/a>", + "Death Plateau<\/a>", + "Burthorpe Troll Cave<\/a>", + "Troll cave<\/a>", + "Ice trolls<\/a>", + "Fremennik Isles<\/a>", + "Undead trolls<\/a>", + "Lucien's camp<\/a>" + ] + }, + { + "default-creature": "Turoth#60 - Large", + "weakness": [], + "creatures": ["Turoth"], + "hidden-creatures": [], + "index": "Turoth", + "alias": [], + "equipment": [ + "Leaf-bladed sword<\/a>", + "Leaf-bladed spear<\/a>", + "Slayer Dart<\/a>", + "Broad arrows<\/a>", + "Broad-tipped bolts<\/a>" + ], + "masters": [ + "Mazchna", + "Chaeldar", + "Sumona" + ], + "locations": [ + "Fremennik Slayer Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Pollnivneach Slayer Dungeon<\/a>" + ] + }, + { + "default-creature": "TzHaar-Hur#Level 86", + "weakness": [], + "creatures": [ + "TzHaar-Hur", + "TzHaar-Ket", + "TzHaar-Mej", + "TzHaar-Xil" + ], + "hidden-creatures": [], + "index": "TzHaar", + "alias": ["Volcanic creatures"], + "equipment": [], + "masters": [ + "Kuradal", + "Morvran" + ], + "locations": ["TzHaar city<\/a>"] + }, + { + "default-creature": "Ghost#1", + "weakness": [], + "creatures": [ + "Aberrant spectre", + "Ahrim the Blighted", + "Akrisae the Doomed", + "Animated spade", + "Ankou", + "Ankou (elite)", + "Armoured phantom", + "Armoured zombie", + "Banshee", + "Bloated monstrosity", + "Bound skeleton", + "Corpse archer", + "Corpse carrier", + "Corpse mage", + "Corpse spider", + "Crawling corpse torso", + "Crawling hand", + "Dharok the Wretched", + "Dragith Nurn", + "Edimmu", + "Edimmu (elite)", + "Fetid zombie", + "General malpractitioner", + "Ghast", + "Ghost", + "Ghost (Abandoned Mine)", + "Ghost (Ourania Runecrafting Altar)", + "Ghost (Shattered Worlds)", + "Ghost (Spirit of Summer)", + "Ghost (Stronghold of Security)", + "Ghostly troll bruiser", + "Ghostly troll thrower", + "Graveside Phantom", + "Guthan the Infested", + "Karil the Tainted", + "Linza the Disgraced", + "Magic axe", + "Masuta the Descended", + "Mighty banshee", + "Monkey Zombie", + "Mummy (Jaldraocht Pyramid)", + "Mummy (Ullek)", + "Osseous", + "Phantom sorcerer", + "Phantom wizard", + "Possessed pickaxe", + "Possessed pickaxe (Lava Flow Mine)", + "Putrid zombie (Rasial)", + "Revenant cyclops", + "Revenant dark beast", + "Revenant demon", + "Revenant dragon", + "Revenant goblin", + "Revenant hellhound", + "Revenant hobgoblin", + "Revenant icefiend", + "Revenant imp", + "Revenant knight", + "Revenant ork", + "Revenant pyrefiend", + "Revenant vampyre", + "Revenant werewolf", + "Risen ghost", + "Shade", + "Shadow warrior", + "Skeletal Wyvern", + "Skeletal hand", + "Skeletal miner", + "Skeleton", + "Skeleton (Lumbridge Catacombs)", + "Skeleton (Tarn's Lair)", + "Skeleton Mage", + "Skeleton archer (Ancient Awakening)", + "Skeleton knight", + "Skeleton ranger (Ancient Awakening)", + "Skeleton warrior (Ancient Awakening)", + "Skeleton warrior (Rasial)", + "Skoblin", + "Skogre", + "Small scarab", + "Soulless armoured zombie", + "Soulless unarmoured zombie", + "Spiritual mage", + "Spiritual ranger", + "Spiritual warrior", + "Taraket the Necromancer", + "Torag the Corrupted", + "Tormented wraith", + "Training dummy", + "Undead chicken", + "Undead cow", + "Undead giant (Battle of Forinthry)", + "Undead one", + "Undead pekin", + "Undead troll", + "Unstable zombie", + "Verac the Defiled", + "Vorkath", + "Wight", + "Wight ranger", + "Wight ranger (Sliske's Endgame)", + "Zogre", + "Zombie", + "Zombie (New Varrock)", + "Zombie cow (New Varrock)", + "Zombie hand", + "Zombie knight", + "Zombie pirate", + "Zombie swab", + "Zombie warrior" + ], + "hidden-creatures": [ + "Wight", + "Wight ranger", + "Wight ranger (Sliske's Endgame)" + ], + "index": "Undead", + "alias": [], + "equipment": [], + "masters": [ + "The Raptor", + "Laniakea" + ], + "locations": [] + }, + { + "default-creature": "Vampyre#Default", + "weakness": [], + "creatures": [ + "Angry vampyre", + "Feral vampyre", + "Revenant vampyre", + "Vampyre", + "Vampyre Juvenile", + "Vampyre Juvinate" + ], + "hidden-creatures": ["Feral vampyre"], + "index": "Vampyres", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "God Wars Dungeon<\/a>", + "Haunted Woods<\/a>", + "Abandoned Mine<\/a>" + ] + }, + { + "default-creature": "Liverworts#Default", + "weakness": [], + "creatures": [ + "Devil's snare", + "Lampenflora", + "Liverworts", + "Luminous snaggler" + ], + "hidden-creatures": [], + "index": "Vile blooms", + "alias": [], + "equipment": [], + "masters": ["Laniakea"], + "locations": ["Anachronia<\/a>"] + }, + { + "default-creature": "Vyrewatch#Level 70", + "weakness": [], + "creatures": [ + "Vyrelady", + "Vyrelord", + "Vyrewatch" + ], + "hidden-creatures": [], + "index": "Vyrewatch", + "alias": [], + "equipment": [ + "Ivandis flail<\/a>", + "Blisterwood polearm<\/a>", + "Blisterwood staff<\/a>", + "Blisterwood stake<\/a>" + ], + "masters": [ + "Chaeldar", + "Sumona", + "Duradel", + "Kuradal", + "Morvran", + "Laniakea" + ], + "locations": [ + "Darkmeyer<\/a>", + "Burgh de Rott Woods<\/a>", + "Meiyerditch<\/a>" + ] + }, + { + "default-creature": "Wall beast#Default", + "weakness": [], + "creatures": ["Wall beast"], + "hidden-creatures": [], + "index": "Wall beasts", + "alias": [], + "equipment": [ + "Spiny helmet<\/a>", + "Spiked helmet<\/a>", + "Slayer helmet<\/a>" + ], + "masters": ["Vannaka"], + "locations": ["Lumbridge Swamp Caves<\/a>"] + }, + { + "default-creature": "Warped terrorbird#1", + "weakness": [], + "creatures": ["Warped terrorbird"], + "hidden-creatures": [], + "index": "Warped terrorbirds", + "alias": [], + "equipment": ["Crystal chime<\/a>"], + "masters": ["Duradel"], + "locations": ["Poison Waste Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Warped tortoise#Vulnerable", + "weakness": [], + "creatures": ["Warped tortoise"], + "hidden-creatures": [], + "index": "Warped tortoises", + "alias": [], + "equipment": ["Crystal chime<\/a>"], + "masters": [ + "Chaeldar", + "Sumona", + "Kuradal" + ], + "locations": ["Poison Waste Slayer Dungeon<\/a>"] + }, + { + "default-creature": "Waterfiend#Default", + "weakness": [], + "creatures": [ + "Maelstrom, Raging Waterfiend", + "Torrential Waterfiend", + "Torrential Waterfiend (summoned)", + "Waterfiend", + "Waterfiend (Ghorrock)", + "Waterfiend (Temple of Aminishi)", + "Waterfiend (The Zamorakian Undercity)", + "Waterfiend (elite)", + "Waterfiend (summoned)" + ], + "hidden-creatures": [ + "Waterfiend (Ghorrock)", + "Waterfiend (Temple of Aminishi)", + "Waterfiend (elite)" + ], + "index": "Waterfiends", + "alias": [], + "equipment": [], + "masters": [ + "Duradel", + "Kuradal", + "Morvran" + ], + "locations": [ + "Ancient Cavern<\/a>", + "Chaos Tunnels<\/a>", + "Ghorrock<\/a>" + ] + }, + { + "default-creature": "Werewolf#Alexis", + "weakness": [], + "creatures": ["Werewolf"], + "hidden-creatures": [], + "index": "Werewolves", + "alias": [], + "equipment": [], + "masters": ["Mazchna"], + "locations": [ + "Canifis<\/a>", + "God Wars Dungeon<\/a>" + ] + }, + { + "default-creature": "Adolescent White wolf#Default", + "weakness": [], + "creatures": [ + "Adolescent White wolf", + "Big Wolf", + "Desert wolf", + "Dire Wolf", + "Fenris wolf", + "Fenris wolf (Sköll)", + "Ice wolf", + "Jungle Wolf", + "White wolf", + "Wolf" + ], + "hidden-creatures": [ + "Fenris wolf", + "Fenris wolf (Sköll)" + ], + "index": "Wolves", + "alias": [], + "equipment": [], + "masters": [ + "Turael", + "Vannaka" + ], + "locations": [ + "Stronghold of Security<\/a>", + "White Wolf Mountain<\/a>", + "Feldip Hills<\/a>" + ] + }, + { + "default-creature": "Armoured phantom#1", + "weakness": [], + "creatures": [ + "Armoured phantom", + "Bound skeleton", + "Fetid zombie", + "Risen ghost" + ], + "hidden-creatures": [], + "index": "Zemouregal's undead", + "alias": [], + "equipment": [], + "masters": ["The Raptor"], + "locations": [ + "Crypt<\/a>", + "Wilderness<\/a>", + "Fort Forinthry<\/a>" + ] + }, + { + "default-creature": "Zombie#Level 29", + "weakness": [], + "creatures": [ + "Armoured zombie", + "Armoured zombie (The Shadow Reef)", + "Armoured zombie (Uncharted Isles)", + "Bloated monstrosity", + "Bossy McBossFace", + "Corpse archer", + "Corpse carrier", + "Corpse mage", + "Corpse spider", + "Crawling corpse torso", + "Crawling hand", + "Dragith Nurn", + "Dried zombie", + "Edimmu", + "Edimmu (elite)", + "Empowering zombie", + "Fetid zombie", + "General malpractitioner", + "Monkey Zombie", + "Mummy (Jaldraocht Pyramid)", + "Mummy (Ullek)", + "Putrid zombie (Rasial)", + "Small scarab", + "Soulless armoured zombie", + "Soulless unarmoured zombie", + "Summoned Zombie", + "Summoned Zombie (The Shadow Reef)", + "Summoned armoured zombie", + "Ulthven Keith", + "Undead Witch", + "Undead chicken", + "Undead cow", + "Undead giant (Battle of Forinthry)", + "Undead one", + "Undead pekin", + "Undead troll", + "Unstable zombie", + "Zogre", + "Zombie", + "Zombie (Lair of Tarn Razorlor)", + "Zombie (New Varrock)", + "Zombie (Stronghold of Security)", + "Zombie (Temple Trekking)", + "Zombie (The Shadow Reef)", + "Zombie (Uncharted Isles)", + "Zombie (Wilderness)", + "Zombie (Zogre Flesh Eaters)", + "Zombie cow (New Varrock)", + "Zombie hand", + "Zombie knight", + "Zombie pirate", + "Zombie swab", + "Zombie warrior" + ], + "hidden-creatures": [ + "Zombie (Zogre Flesh Eaters)", + "Zombie cow (New Varrock)" + ], + "index": "Zombies", + "alias": [], + "equipment": [], + "masters": [ + "Jacquelyn", + "Vannaka", + "The Raptor" + ], + "locations": [ + "Gnome Village Dungeon<\/a>", + "Entrana Dungeon<\/a>", + "Edgeville Dungeon<\/a>", + "Chaos Tunnels<\/a>", + "Graveyard of Shadows<\/a>", + "Stronghold of Security<\/a>", + "Varrock Sewers<\/a>", + "Wizards' Guild<\/a>", + "Draynor Sewers<\/a>", + "lair of Tarn Razorlor<\/a>" + ] + } +] diff --git a/src/data/old/creatures.json b/src/data/old/creatures.json new file mode 100644 index 0000000..7b1fe5e --- /dev/null +++ b/src/data/old/creatures.json @@ -0,0 +1,26988 @@ +[ + { + "name": "Aberrant spectre", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "60", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Pollnivneach Slayer Dungeon", + "slayer-exp": 123.19999694824219, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "224", + "max-necromancy": "0" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "60", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Slayer Tower", + "slayer-exp": 109.4000015258789, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "0" + } + ] + }, + { + "name": "Abyssal beast", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "105", + "experience": 1950, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 643.5, + "max-melee": "1415", + "weakness": ["<\/a>"], + "max-spec": "1415", + "name": "Default", + "slayer-exp": 1448.4000244140625, + "lifepoints": "39000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal demon", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "85", + "experience": 425, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 140.1999969482422, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 278, + "lifepoints": "8500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal demon (elite)", + "variants": [{ + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "85", + "experience": 1700, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 561, + "max-melee": "2016", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1069, + "lifepoints": "34000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal lord", + "variants": [{ + "image": "", + "level": "133", + "defence": "95", + "slayer-level": "115", + "experience": 3700, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1221, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "816", + "name": "Default", + "slayer-exp": 8235, + "lifepoints": "74000", + "max-ranged": "0", + "max-magic": "1163", + "max-necromancy": "0" + }] + }, + { + "name": "Abyssal savage", + "variants": [ + { + "image": "", + "level": "111", + "defence": "75", + "slayer-level": "95", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Asylum", + "slayer-exp": 423.20001220703125, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "816", + "max-necromancy": "0" + }, + { + "image": "", + "level": "111", + "defence": "75", + "slayer-level": "95", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 423.20001220703125, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "816", + "max-necromancy": "0" + } + ] + }, + { + "name": "Acheron mammoth", + "variants": [{ + "image": "", + "level": "135", + "defence": "95", + "slayer-level": "96", + "experience": 2531.199951171875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 835.2000122070312, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Default", + "slayer-exp": 3628.800048828125, + "lifepoints": "50625", + "max-ranged": "4412", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Adamant dragon", + "variants": [{ + "image": "", + "level": "116", + "defence": "87", + "slayer-level": "1", + "experience": 1640.5999755859375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 541.2999877929688, + "max-melee": "1120", + "weakness": ["<\/a>"], + "max-spec": "1300", + "name": "Default", + "slayer-exp": 655.5999755859375, + "lifepoints": "32812", + "max-ranged": "1120", + "max-magic": "1120", + "max-necromancy": "0" + }] + }, + { + "name": "Airut", + "variants": [ + { + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "92", + "experience": 843.7000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 278.3999938964844, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "1600", + "name": "Melee", + "slayer-exp": 800.2000122070312, + "lifepoints": "16875", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "92", + "experience": 843.7000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 278.3999938964844, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1600", + "name": "Ranged", + "slayer-exp": 800.2000122070312, + "lifepoints": "16875", + "max-ranged": "816", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ankou", + "variants": [{ + "image": "", + "level": "54", + "defence": "38", + "slayer-level": "1", + "experience": 307.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 101.4000015258789, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 98, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ankou (Kili's Knowledge IV)", + "variants": [{ + "image": "", + "level": "72", + "defence": "?", + "slayer-level": "1", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "624", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 313.6000061035156, + "lifepoints": "31000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ankou (elite)", + "variants": [{ + "image": "", + "level": "67", + "defence": "42", + "slayer-level": "1", + "experience": 1177.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 388.5, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 314, + "lifepoints": "23550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Aquanite", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "78", + "experience": 350, + "susceptible": ["<\/a>"], + "lifepoint-exp": 115.5, + "max-melee": "652", + "weakness": ["<\/a>"], + "max-spec": "652", + "name": "Default", + "slayer-exp": 212.60000610351562, + "lifepoints": "7000", + "max-ranged": "652", + "max-magic": "652", + "max-necromancy": "0" + }] + }, + { + "name": "Aquanite (elite)", + "variants": [{ + "image": "", + "level": "104", + "defence": "68", + "slayer-level": "78", + "experience": 1400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 462, + "max-melee": "1958", + "weakness": ["<\/a>"], + "max-spec": "1958", + "name": "Default", + "slayer-exp": 968, + "lifepoints": "28000", + "max-ranged": "1958", + "max-magic": "1958", + "max-necromancy": "0" + }] + }, + { + "name": "Armoured phantom", + "variants": [ + { + "image": "", + "level": "150", + "defence": "87", + "slayer-level": "113", + "experience": 2625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 866.2000122070312, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "7000", + "name": "1", + "slayer-exp": 2500, + "lifepoints": "52500", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "150", + "defence": "87", + "slayer-level": "113", + "experience": 2625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 866.2000122070312, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "7000", + "name": "2", + "slayer-exp": 2500, + "lifepoints": "52500", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "150", + "defence": "87", + "slayer-level": "113", + "experience": 2625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 866.2000122070312, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "7000", + "name": "3", + "slayer-exp": 2500, + "lifepoints": "52500", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + } + ] + }, + { + "name": "Capsarius", + "variants": [ + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "81", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 146.60000610351562, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "168", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "81", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 146.60000610351562, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "168", + "max-necromancy": "0" + } + ] + }, + { + "name": "Gladius", + "variants": [{ + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "81", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 220.1999969482422, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "624", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Primus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "3300", + "name": "Default", + "slayer-exp": 1938.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Quartus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Quintus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Secundus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Sextus", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Legio Tertius", + "variants": [{ + "image": "", + "level": "304", + "defence": "85", + "slayer-level": "95", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1829.199951171875, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1102", + "max-necromancy": "0" + }] + }, + { + "name": "Rorarius", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "81", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "576", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "81", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "576", + "max-necromancy": "0" + } + ] + }, + { + "name": "Scutarius", + "variants": [ + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "81", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 390.20001220703125, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "81", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 390.20001220703125, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Aviansie", + "variants": [ + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 491.79998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 162.1999969482422, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee, level 89 (1)", + "slayer-exp": 170.39999389648438, + "lifepoints": "6400", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 491.79998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 162.1999969482422, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee, level 89 (2)", + "slayer-exp": 187.8000030517578, + "lifepoints": "6400", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "92", + "defence": "68", + "slayer-level": "1", + "experience": 542.2000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 178.89999389648438, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee, level 92", + "slayer-exp": 207.39999389648438, + "lifepoints": "6600", + "max-ranged": "264", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 491.79998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 162.1999969482422, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged, level 89", + "slayer-exp": 170.39999389648438, + "lifepoints": "6400", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 542.2000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 178.89999389648438, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged, level 92", + "slayer-exp": 187.8000030517578, + "lifepoints": "6600", + "max-ranged": "264", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 340, + "susceptible": ["<\/a>"], + "lifepoint-exp": 112.19999694824219, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged, level 95", + "slayer-exp": 207.39999389648438, + "lifepoints": "6800", + "max-ranged": "272", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Flight Kilisa", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "250", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 363.79998779296875, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Flockleader Geerin", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 363.79998779296875, + "lifepoints": "10000", + "max-ranged": "250", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kree'arra", + "variants": [ + { + "image": "", + "level": "580", + "defence": "75", + "slayer-level": "1", + "experience": 2500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 825, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Hard Mode", + "slayer-exp": 3912, + "lifepoints": "100000", + "max-ranged": "3000", + "max-magic": "700", + "max-necromancy": "0" + }, + { + "image": "", + "level": "580", + "defence": "75", + "slayer-level": "1", + "experience": 1875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 618.7000122070312, + "max-melee": "1676", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 2934.199951171875, + "lifepoints": "75000", + "max-ranged": "1080", + "max-magic": "1080", + "max-necromancy": "0" + }, + { + "image": "", + "level": "210", + "defence": "75", + "slayer-level": "N/A", + "experience": 2500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 825, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "The World Wakes", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "3000", + "max-magic": "700", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spiritual mage", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zamorak", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Armadyl", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Saradomin", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "350", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "83", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bandos", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "350", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "83", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 229, + "lifepoints": "1120", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spiritual ranger", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zamorak", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Armadyl", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Saradomin", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "63", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bandos", + "slayer-exp": 122, + "lifepoints": "7000", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "63", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 122, + "lifepoints": "1120", + "max-ranged": "280", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spiritual warrior", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zamorak", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Armadyl", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Saradomin", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "35", + "slayer-level": "68", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bandos", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "68", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 229, + "lifepoints": "1120", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Wingman Skree", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 363.79998779296875, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "900", + "max-necromancy": "?" + }] + }, + { + "name": "Banshee", + "variants": [{ + "image": "", + "level": "24", + "defence": "14", + "slayer-level": "15", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "990", + "name": "Default", + "slayer-exp": 46, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "440", + "max-necromancy": "0" + }] + }, + { + "name": "Mighty banshee", + "variants": [{ + "image": "", + "level": "61", + "defence": "38", + "slayer-level": "15", + "experience": 307.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 101.4000015258789, + "max-melee": "860", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 89.4000015258789, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "1020", + "max-necromancy": "0" + }] + }, + { + "name": "Basilisk", + "variants": [ + { + "image": "", + "level": "49", + "defence": "30", + "slayer-level": "40", + "experience": 240, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 79.19999694824219, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Large", + "slayer-exp": 79.5999984741211, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "30", + "slayer-level": "40", + "experience": 240, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 79.19999694824219, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Small", + "slayer-exp": 79.5999984741211, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Albino bat", + "variants": [{ + "image": "", + "level": "43", + "defence": "31", + "slayer-level": "1", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 18, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bat", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8.199999809265137, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "40", + "max-necromancy": "0" + }] + }, + { + "name": "Giant bat", + "variants": [ + { + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 18.799999237060547, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "23", + "defence": "17", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Brine Cavern", + "slayer-exp": 10.199999809265137, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped bat", + "variants": [{ + "image": "", + "level": "16", + "defence": "12", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9.199999809265137, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "240", + "max-necromancy": "0" + }] + }, + { + "name": "Angry bear", + "variants": [ + { + "image": "", + "level": "40", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "175", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A Soul's Bane", + "slayer-exp": 0, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bear cub", + "variants": [{ + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Black bear", + "variants": [{ + "image": "", + "level": "23", + "defence": "17", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 10.199999809265137, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Grizzly bear", + "variants": [ + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "460", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard", + "slayer-exp": 13, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 187.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61.79999923706055, + "max-melee": "460", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Tirannwn", + "slayer-exp": 16.600000381469727, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Grizzly bear cub", + "variants": [{ + "image": "", + "level": "17", + "defence": "15", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bird", + "variants": [ + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Black", + "slayer-exp": 6.800000190734863, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green", + "slayer-exp": 6.800000190734863, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Chicken", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "White", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Chompy bird", + "variants": [{ + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 15, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.900000095367432, + "max-melee": "6", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.399999618530273, + "lifepoints": "300", + "max-ranged": "8", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Duck", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Male", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Female", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Land", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Duckling", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jubbly bird", + "variants": [{ + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "24", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7.599999904632568, + "lifepoints": "400", + "max-ranged": "32", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mounted terrorbird gnome", + "variants": [ + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": ["<\/a>"], + "lifepoint-exp": 87.4000015258789, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 46", + "slayer-exp": 19.600000381469727, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 307.5, + "susceptible": [], + "lifepoint-exp": 101.4000015258789, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 53", + "slayer-exp": 24.799999237060547, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Oomlie bird", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 570, + "susceptible": ["<\/a>"], + "lifepoint-exp": 188.10000610351562, + "max-melee": "1280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 85.19999694824219, + "lifepoints": "11400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pekin", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Penguin (monster)", + "variants": [{ + "image": "", + "level": "8", + "defence": "6", + "slayer-level": "1", + "experience": 77.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25.5, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7, + "lifepoints": "1550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pernicious parrot", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 185, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 34.20000076293945, + "lifepoints": "3700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Rooster", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "15", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Seagull", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Tenacious toucan", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 262.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 86.5999984741211, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "5250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Terrorbird", + "variants": [{ + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 17.200000762939453, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead chicken", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 11.5, + "max-melee": "75", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead pekin", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 35, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 11.5, + "max-melee": "75", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Balfrug Kreeyath", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 272.79998779296875, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "750", + "max-necromancy": "0" + }] + }, + { + "name": "Black demon", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 294.3999938964844, + "lifepoints": "9000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 294.3999938964844, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 850, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 280.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 564.4000244140625, + "lifepoints": "17000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + } + ] + }, + { + "name": "Alanogard the Black", + "variants": [{ + "image": "", + "level": "117", + "defence": "75", + "slayer-level": "1", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1353", + "weakness": ["<\/a>"], + "max-spec": "5000", + "name": "Default", + "slayer-exp": 9794, + "lifepoints": "180000", + "max-ranged": "1353", + "max-magic": "1353", + "max-necromancy": "0" + }] + }, + { + "name": "Baby black dragon", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "150", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 43.20000076293945, + "lifepoints": "2500", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Black dragon", + "variants": [ + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "3", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "4", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + }, + { + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "475", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "5", + "slayer-exp": 245, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "475", + "max-necromancy": "0" + } + ] + }, + { + "name": "Black dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 1950, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 643.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1550, + "lifepoints": "39000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "King Black Dragon", + "variants": [{ + "image": "", + "level": "276", + "defence": "60", + "slayer-level": "1", + "experience": 2250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 742.5, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "4960", + "name": "Default", + "slayer-exp": 1050.5999755859375, + "lifepoints": "45000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "0" + }] + }, + { + "name": "Queen Black Dragon", + "variants": [ + { + "image": "", + "level": "900", + "defence": "80", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "2480", + "weakness": ["<\/a>"], + "max-spec": "6500", + "name": "Carapace", + "slayer-exp": 1693.199951171875, + "lifepoints": "36000", + "max-ranged": "2480", + "max-magic": "2480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "900", + "defence": "80", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "2480", + "weakness": [ + "<\/a>", + "<\/a>" + ], + "max-spec": "6500", + "name": "Crystal", + "slayer-exp": 1693.199951171875, + "lifepoints": "36000", + "max-ranged": "2480", + "max-magic": "2480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "900", + "defence": "80", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "2480", + "weakness": ["<\/a>"], + "max-spec": "6500", + "name": "Normal", + "slayer-exp": 1693.199951171875, + "lifepoints": "36000", + "max-ranged": "2480", + "max-magic": "2480", + "max-necromancy": "0" + } + ] + }, + { + "name": "Verak Lith", + "variants": [{ + "image": "", + "level": "1450", + "defence": "70", + "slayer-level": "1", + "experience": 15000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 4950, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "9000", + "name": "Default", + "slayer-exp": 27438, + "lifepoints": "600000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Verak Little", + "variants": [{ + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "180000", + "max-ranged": "1966", + "max-magic": "1966", + "max-necromancy": "?" + }] + }, + { + "name": "Bloodveld", + "variants": [{ + "image": "", + "level": "58", + "defence": "49", + "slayer-level": "50", + "experience": 512.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 169.10000610351562, + "max-melee": "680", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 84.4000015258789, + "lifepoints": "10250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bloodveld (God Wars Dungeon)", + "variants": [{ + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "50", + "experience": 330, + "susceptible": ["<\/a>"], + "lifepoint-exp": 108.9000015258789, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "6600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bloodveld (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "50", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated bloodveld", + "variants": [ + { + "image": "", + "level": "81", + "defence": "65", + "slayer-level": "50", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A", + "slayer-exp": 205.8000030517578, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "65", + "slayer-level": "50", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "B", + "slayer-exp": 205.8000030517578, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Baby blue dragon", + "variants": [{ + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 80, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 26.399999618530273, + "max-melee": "128", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 18.799999237060547, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "128", + "max-necromancy": "0" + }] + }, + { + "name": "Blue dragon", + "variants": [ + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "1", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "2", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "3", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "4", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "5", + "slayer-exp": 93.80000305175781, + "lifepoints": "5000", + "max-ranged": "N/A", + "max-magic": "349", + "max-necromancy": "0" + } + ] + }, + { + "name": "Vorkath", + "variants": [ + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 60411.6015625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19935.80078125, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Hard mode", + "slayer-exp": 31340.5, + "lifepoints": "1500000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 60411.6015625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19935.80078125, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "8500", + "name": "Normal mode", + "slayer-exp": 31340.5, + "lifepoints": "750000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Requiem for a Dragon", + "slayer-exp": 31340.5, + "lifepoints": "75001", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "789", + "defence": "65", + "slayer-level": "1", + "experience": 60411.6015625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19935.80078125, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 31340.5, + "lifepoints": "375000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "?" + } + ] + }, + { + "name": "Bound skeleton", + "variants": [ + { + "image": "", + "level": "70", + "defence": "65", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1194", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 420, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "65", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1194", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 420, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "65", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1194", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 420, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Brine rat", + "variants": [{ + "image": "", + "level": "43", + "defence": "30", + "slayer-level": "47", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "640", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 43.20000076293945, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Bronze dragon", + "variants": [{ + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "409", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 124.5, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "409", + "max-necromancy": "0" + }] + }, + { + "name": "Camel Warrior", + "variants": [{ + "image": "", + "level": "132", + "defence": "93", + "slayer-level": "96", + "experience": 1006.2000122070312, + "susceptible": ["<\/a>"], + "lifepoint-exp": 332, + "max-melee": "912", + "weakness": ["<\/a>"], + "max-spec": "2678", + "name": "Default", + "slayer-exp": 4768.7998046875, + "lifepoints": "20125", + "max-ranged": "931", + "max-magic": "931", + "max-necromancy": "0" + }] + }, + { + "name": "Catablepon", + "variants": [{ + "image": "", + "level": "43", + "defence": "28", + "slayer-level": "1", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 74.5, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "700", + "max-necromancy": "0" + }] + }, + { + "name": "Cave bug", + "variants": [ + { + "image": "", + "level": "6", + "defence": "4", + "slayer-level": "7", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 6", + "slayer-exp": 7, + "lifepoints": "650", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "7", + "slayer-level": "7", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11", + "slayer-exp": 8, + "lifepoints": "1650", + "max-ranged": "180", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cave crawler", + "variants": [ + { + "image": "", + "level": "24", + "defence": "15", + "slayer-level": "10", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 24", + "slayer-exp": 24.5, + "lifepoints": "2650", + "max-ranged": "400", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "59", + "defence": "40", + "slayer-level": "10", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 59", + "slayer-exp": 57.599998474121094, + "lifepoints": "6500", + "max-ranged": "900", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cave horror", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "58", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 99.4000015258789, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cave horror (elite)", + "variants": [{ + "image": "", + "level": "86", + "defence": "75", + "slayer-level": "58", + "experience": 550, + "susceptible": ["<\/a>"], + "lifepoint-exp": 181.5, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 509, + "lifepoints": "11000", + "max-ranged": "0", + "max-magic": "660", + "max-necromancy": "0" + }] + }, + { + "name": "Unspeakable horror", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "58", + "experience": 650, + "susceptible": ["<\/a>"], + "lifepoint-exp": 214.5, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "13000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Unspeakable horror (elite)", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "58", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1241.5999755859375, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + }] + }, + { + "name": "Cave slime", + "variants": [{ + "image": "", + "level": "22", + "defence": "19", + "slayer-level": "17", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 11, + "lifepoints": "3150", + "max-ranged": "240", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant slime", + "variants": [ + { + "image": "", + "level": "106", + "defence": "60", + "slayer-level": "1", + "experience": 6000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1980, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": 5047, + "lifepoints": "120000", + "max-ranged": "1400", + "max-magic": "1400", + "max-necromancy": "0" + }, + { + "image": "", + "level": "106", + "defence": "60", + "slayer-level": "1", + "experience": 6000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1980, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": 2523.39990234375, + "lifepoints": "120000", + "max-ranged": "1400", + "max-magic": "1400", + "max-necromancy": "0" + } + ] + }, + { + "name": "Laboratory slime", + "variants": [ + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "1", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Adult (normal mode)", + "slayer-exp": 551, + "lifepoints": "20000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "N/A", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Spawnling (normal mode)", + "slayer-exp": -2, + "lifepoints": "9500", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "1", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Adult (story mode)", + "slayer-exp": 275.3999938964844, + "lifepoints": "9500", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "90", + "defence": "60", + "slayer-level": "N/A", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Spawnling (story mode)", + "slayer-exp": -2, + "lifepoints": "9500", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Astellarn", + "variants": [{ + "image": "", + "level": "1200", + "defence": "85", + "slayer-level": "1", + "experience": 6250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2062.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "2700", + "name": "Default", + "slayer-exp": 27400, + "lifepoints": "250000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Celestial dragon", + "variants": [{ + "image": "", + "level": "127", + "defence": "91", + "slayer-level": "1", + "experience": 1137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 375.29998779296875, + "max-melee": "1068", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 976.5999755859375, + "lifepoints": "22750", + "max-ranged": "0", + "max-magic": "1168", + "max-necromancy": "0" + }] + }, + { + "name": "Celestial dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 2400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 792, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 2400, + "lifepoints": "48000", + "max-ranged": "1653", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Elegorn the Celestial", + "variants": [{ + "image": "", + "level": "114", + "defence": "90", + "slayer-level": "1", + "experience": 8750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2887.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 8800, + "lifepoints": "175000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Giant", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 371.20001220703125, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 929.4000244140625, + "lifepoints": "22500", + "max-ranged": "450", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockatrice", + "variants": [{ + "image": "", + "level": "31", + "defence": "25", + "slayer-level": "25", + "experience": 202.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 66.80000305175781, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 23.399999618530273, + "lifepoints": "4050", + "max-ranged": "400", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockroach drone", + "variants": [{ + "image": "", + "level": "4", + "defence": "3", + "slayer-level": "1", + "experience": 60, + "susceptible": ["<\/a>"], + "lifepoint-exp": 19.799999237060547, + "max-melee": "60", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockroach soldier", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 525, + "susceptible": ["<\/a>"], + "lifepoint-exp": 173.1999969482422, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 14, + "lifepoints": "10500", + "max-ranged": "1000", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cockroach worker", + "variants": [{ + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "1", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Warped cockroach", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8.199999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "500", + "max-ranged": "20", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted dust devil", + "variants": [{ + "image": "", + "level": "107", + "defence": "76", + "slayer-level": "97", + "experience": 600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 198, + "max-melee": "1123", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 679.7999877929688, + "lifepoints": "12000", + "max-ranged": "1123", + "max-magic": "1123", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted kalphite guardian", + "variants": [{ + "image": "", + "level": "110", + "defence": "78", + "slayer-level": "100", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 494, + "lifepoints": "15000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted kalphite marauder", + "variants": [{ + "image": "", + "level": "110", + "defence": "78", + "slayer-level": "100", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 494, + "lifepoints": "15000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted lizard", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "94", + "experience": 550, + "susceptible": ["<\/a>"], + "lifepoint-exp": 181.5, + "max-melee": "1094", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 533.4000244140625, + "lifepoints": "11000", + "max-ranged": "1094", + "max-magic": "1094", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted scarab", + "variants": [{ + "image": "", + "level": "101", + "defence": "72", + "slayer-level": "91", + "experience": 500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 165, + "max-melee": "700", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 389, + "lifepoints": "10000", + "max-ranged": "700", + "max-magic": "700", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted scorpion", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "88", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 353.20001220703125, + "lifepoints": "9000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }] + }, + { + "name": "Corrupted worker", + "variants": [{ + "image": "", + "level": "113", + "defence": "80", + "slayer-level": "103", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1180", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 653, + "lifepoints": "15000", + "max-ranged": "1180", + "max-magic": "1180", + "max-necromancy": "0" + }] + }, + { + "name": "Cow", + "variants": [ + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard (1)", + "slayer-exp": 3.299999952316284, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard (2)", + "slayer-exp": 3.299999952316284, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard (3)", + "slayer-exp": 3.299999952316284, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zanaris", + "slayer-exp": 6.400000095367432, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cow calf", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8.199999809265137, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 3.200000047683716, + "lifepoints": "500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Super Cow", + "variants": [{ + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 36.400001525878906, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead cow", + "variants": [{ + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Crawling hand", + "variants": [ + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6a", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6b", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6c", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6d", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6", + "defence": "5", + "slayer-level": "5", + "experience": 72.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 23.899999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6e", + "slayer-exp": 7.599999904632568, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10a", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10b", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10c", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10d", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10", + "defence": "8", + "slayer-level": "5", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10e", + "slayer-exp": 9.199999809265137, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeletal hand", + "variants": [{ + "image": "", + "level": "63", + "defence": "50", + "slayer-level": "5", + "experience": 420, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 138.60000610351562, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 60.599998474121094, + "lifepoints": "8400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Zombie hand", + "variants": [{ + "image": "", + "level": "69", + "defence": "54", + "slayer-level": "5", + "experience": 460, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 151.8000030517578, + "max-melee": "880", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 73.19999694824219, + "lifepoints": "9200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Edimmu", + "variants": [{ + "image": "", + "level": "122", + "defence": "85", + "slayer-level": "90", + "experience": 1600, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 528, + "max-melee": "350", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 880.2000122070312, + "lifepoints": "32000", + "max-ranged": "0", + "max-magic": "350", + "max-necromancy": "0" + }] + }, + { + "name": "Edimmu (elite)", + "variants": [{ + "image": "", + "level": "125", + "defence": "85", + "slayer-level": "90", + "experience": 4800, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1584, + "max-melee": "1050", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 2044.5999755859375, + "lifepoints": "96000", + "max-ranged": "0", + "max-magic": "1050", + "max-necromancy": "0" + }] + }, + { + "name": "Frost dragon", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 425, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 140.1999969482422, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 398.79998779296875, + "lifepoints": "8500", + "max-ranged": "500", + "max-magic": "500", + "max-necromancy": "0" + }] + }, + { + "name": "Kal'gerion demon", + "variants": [ + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Bloodchiller", + "slayer-exp": 1858.800048828125, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Riftsplitter", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Pummeller", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Thunderous", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Warmonger", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }, + { + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Rush of Blood", + "slayer-exp": 1858.800048828125, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + } + ] + }, + { + "name": "Seeker", + "variants": [{ + "image": "", + "level": "86", + "defence": "55", + "slayer-level": "71", + "experience": 1200, + "susceptible": ["<\/a>"], + "lifepoint-exp": 396, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "Default", + "slayer-exp": 440.3999938964844, + "lifepoints": "24000", + "max-ranged": "0", + "max-magic": "250", + "max-necromancy": "0" + }] + }, + { + "name": "Soulgazer", + "variants": [{ + "image": "", + "level": "128", + "defence": "85", + "slayer-level": "99", + "experience": 2000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 660, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1950.4000244140625, + "lifepoints": "40000", + "max-ranged": "0", + "max-magic": "738", + "max-necromancy": "0" + }] + }, + { + "name": "Bulbous crawler", + "variants": [{ + "image": "", + "level": "140", + "defence": "95", + "slayer-level": "106", + "experience": 1900, + "susceptible": ["<\/a>"], + "lifepoint-exp": 627, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 2360, + "lifepoints": "38000", + "max-ranged": "2123", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Moss golem", + "variants": [{ + "image": "", + "level": "140", + "defence": "95", + "slayer-level": "108", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "2123", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 2408.800048828125, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Vinecrawler", + "variants": [{ + "image": "", + "level": "140", + "defence": "95", + "slayer-level": "104", + "experience": 1600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 528, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 2086, + "lifepoints": "32000", + "max-ranged": "0", + "max-magic": "2123", + "max-necromancy": "?" + }] + }, + { + "name": "Automaton Generator", + "variants": [ + { + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "67", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Post-quest", + "slayer-exp": 624, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "510", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "N/A", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "During The World Wakes", + "slayer-exp": 0, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "600", + "max-necromancy": "0" + } + ] + }, + { + "name": "Automaton Guardian", + "variants": [ + { + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "67", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "810", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "Post-quest", + "slayer-exp": 624, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "N/A", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "During The World Wakes", + "slayer-exp": 0, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Automaton Tracer", + "variants": [ + { + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "67", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Post-quest", + "slayer-exp": 624, + "lifepoints": "20000", + "max-ranged": "510", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "N/A", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1000", + "name": "The World Wakes", + "slayer-exp": 0, + "lifepoints": "7500", + "max-ranged": "600", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crocodile", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "116", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "77", + "slayer-exp": 44.400001525878906, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "29", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "116", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "40", + "slayer-exp": 33.400001525878906, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crocodile akh", + "variants": [{ + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "111", + "experience": 900, + "susceptible": ["<\/a>"], + "lifepoint-exp": 297, + "max-melee": "1561", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 761.2000122070312, + "lifepoints": "18000", + "max-ranged": "1561", + "max-magic": "1561", + "max-necromancy": "0" + }] + }, + { + "name": "Ol' Sawtooth", + "variants": [{ + "image": "", + "level": "120", + "defence": "70", + "slayer-level": "1", + "experience": 6750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2227.5, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "135000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea crocodile", + "variants": [ + { + "image": "", + "level": "77", + "defence": "75", + "slayer-level": "1", + "experience": 634.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 209.3000030517578, + "max-melee": "936", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "15500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "?", + "slayer-level": "1", + "experience": 387.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 127.80000305175781, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "7750", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crystal Shapeshifter", + "variants": [ + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "80", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "1900", + "name": "Melee", + "slayer-exp": 1269.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "80", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1900", + "name": "Ranged", + "slayer-exp": 1269.800048828125, + "lifepoints": "30000", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "80", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1900", + "name": "Magic", + "slayer-exp": 1269.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "980", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cyclops", + "variants": [ + { + "image": "", + "level": "57", + "defence": "41", + "slayer-level": "1", + "experience": 205, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67.5999984741211, + "max-melee": "205", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "57 (Stab)", + "slayer-exp": 71.80000305175781, + "lifepoints": "4100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 245, + "susceptible": ["<\/a>"], + "lifepoint-exp": 80.80000305175781, + "max-melee": "245", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "68 (Stab)", + "slayer-exp": 86.5999984741211, + "lifepoints": "4900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "57", + "defence": "41", + "slayer-level": "1", + "experience": 205, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67.5999984741211, + "max-melee": "205", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "57 (Slash)", + "slayer-exp": 71.80000305175781, + "lifepoints": "4100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 245, + "susceptible": ["<\/a>"], + "lifepoint-exp": 80.80000305175781, + "max-melee": "245", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "68 (Slash)", + "slayer-exp": 86.5999984741211, + "lifepoints": "4900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "57", + "defence": "41", + "slayer-level": "1", + "experience": 205, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67.5999984741211, + "max-melee": "205", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "57 (Crush)", + "slayer-exp": 71.80000305175781, + "lifepoints": "4100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 245, + "susceptible": ["<\/a>"], + "lifepoint-exp": 80.80000305175781, + "max-melee": "245", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "68 (Crush)", + "slayer-exp": 86.5999984741211, + "lifepoints": "4900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 487.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 160.8000030517578, + "max-melee": "325", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "91 (God Wars Dungeon), 1", + "slayer-exp": 281.79998779296875, + "lifepoints": "9750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 487.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 160.8000030517578, + "max-melee": "325", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "91 (God Wars Dungeon), 2", + "slayer-exp": 281.79998779296875, + "lifepoints": "9750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cyclossus", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 630, + "susceptible": ["<\/a>"], + "lifepoint-exp": 207.89999389648438, + "max-melee": "960", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 350, + "lifepoints": "12600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth (Lighthouse)", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "165", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 77", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 78", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dagannoth (Waterbirth Island)", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (78)", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "79", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (79)", + "slayer-exp": 61, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Blood Runs Deep (78)", + "slayer-exp": -1, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dagannoth (Waterbirth Island, ranged)", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 46.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged (78)", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "224", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "79", + "defence": "57", + "slayer-level": "1", + "experience": 142.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged (79)", + "slayer-exp": 64, + "lifepoints": "2850", + "max-ranged": "171", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dagannoth Prime", + "variants": [{ + "image": "", + "level": "303", + "defence": "68", + "slayer-level": "1", + "experience": 875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 288.70001220703125, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1068, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "1788", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth Rex", + "variants": [{ + "image": "", + "level": "303", + "defence": "68", + "slayer-level": "1", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "1788", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1068, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth Supreme", + "variants": [{ + "image": "", + "level": "303", + "defence": "68", + "slayer-level": "1", + "experience": 875, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 288.70001220703125, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1068, + "lifepoints": "35000", + "max-ranged": "1788", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth fledgeling", + "variants": [{ + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth guardian", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 165, + "max-melee": "400", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 326.6000061035156, + "lifepoints": "10000", + "max-ranged": "400", + "max-magic": "400", + "max-necromancy": "0" + }] + }, + { + "name": "Dagannoth spawn", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 117.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 38.70000076293945, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 39.400001525878906, + "lifepoints": "2350", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dark beast", + "variants": [ + { + "image": "", + "level": "101", + "defence": "75", + "slayer-level": "90", + "experience": 425, + "susceptible": ["<\/a>"], + "lifepoint-exp": 140.1999969482422, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "8,500 life points", + "slayer-exp": 331.3999938964844, + "lifepoints": "8500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "101", + "defence": "75", + "slayer-level": "90", + "experience": 950, + "susceptible": ["<\/a>"], + "lifepoint-exp": 313.5, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "19,000 life points", + "slayer-exp": 440, + "lifepoints": "19000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dark beast (elite)", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "90", + "experience": 1700, + "susceptible": ["<\/a>"], + "lifepoint-exp": 561, + "max-melee": "1800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1372.800048828125, + "lifepoints": "34000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant dark beast", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 442.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 146, + "max-melee": "1327", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 415.6000061035156, + "lifepoints": "8850", + "max-ranged": "1327", + "max-magic": "1327", + "max-necromancy": "0" + }] + }, + { + "name": "Cerberus Juvenile", + "variants": [{ + "image": "", + "level": "138", + "defence": "85", + "slayer-level": "1", + "experience": 6000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1980, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10000, + "lifepoints": "120000", + "max-ranged": "2011", + "max-magic": "2011", + "max-necromancy": "0" + }] + }, + { + "name": "Gargoyle", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "75", + "experience": 335, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 110.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Regular", + "slayer-exp": 197.39999389648438, + "lifepoints": "6700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "75", + "experience": 675, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 222.6999969482422, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 197.39999389648438, + "lifepoints": "13500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon", + "variants": [ + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "1", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "2", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "3", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "4", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "5", + "slayer-exp": 135.39999389648438, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "566", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon ash lord", + "variants": [ + { + "image": "", + "level": "157", + "defence": "110", + "slayer-level": "1", + "experience": 7000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2310, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The Zamorakian Undercity", + "slayer-exp": 7150, + "lifepoints": "140000", + "max-ranged": "1564", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "149", + "defence": "100", + "slayer-level": "1", + "experience": 5500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1815, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 7150, + "lifepoints": "110000", + "max-ranged": "1564", + "max-magic": "2570", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon berserker", + "variants": [ + { + "image": "", + "level": "166", + "defence": "110", + "slayer-level": "1", + "experience": 7000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2310, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The Zamorakian Undercity", + "slayer-exp": 7150, + "lifepoints": "140000", + "max-ranged": "1564", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "159", + "defence": "104", + "slayer-level": "1", + "experience": 5500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1815, + "max-melee": "2793", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": 7150, + "lifepoints": "110000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon brute", + "variants": [{ + "image": "", + "level": "148", + "defence": "107", + "slayer-level": "1", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "2346", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + }] + }, + { + "name": "Greater demon pyromancer", + "variants": [ + { + "image": "", + "level": "132", + "defence": "98", + "slayer-level": "1", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The Zamorakian Undercity", + "slayer-exp": -1, + "lifepoints": "70000", + "max-ranged": "1564", + "max-magic": "2011", + "max-necromancy": "0" + }, + { + "image": "", + "level": "132", + "defence": "85", + "slayer-level": "1", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Wilderness", + "slayer-exp": -1, + "lifepoints": "50000", + "max-ranged": "1564", + "max-magic": "2011", + "max-necromancy": "0" + } + ] + }, + { + "name": "Greater demon sage", + "variants": [{ + "image": "", + "level": "146", + "defence": "104", + "slayer-level": "1", + "experience": 4500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1485, + "max-melee": "1564", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1564", + "max-magic": "2346", + "max-necromancy": "0" + }] + }, + { + "name": "Greater demon savage", + "variants": [{ + "image": "", + "level": "133", + "defence": "100", + "slayer-level": "1", + "experience": 4000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1320, + "max-melee": "2011", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "80000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + }] + }, + { + "name": "Imp", + "variants": [ + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 10, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3.299999952316284, + "max-melee": "16", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal", + "slayer-exp": 6.599999904632568, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 10, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3.299999952316284, + "max-melee": "16", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon", + "slayer-exp": 6.599999904632568, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Imp scavenger", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 1650, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 544.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "33000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "K'ril Tsutsaroth", + "variants": [ + { + "image": "", + "level": "650", + "defence": "70", + "slayer-level": "1", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "Hard mode", + "slayer-exp": 3912.39990234375, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "840", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "75", + "slayer-level": "1", + "experience": 2750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 907.5, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "6600", + "name": "Normal", + "slayer-exp": 2151.800048828125, + "lifepoints": "55000", + "max-ranged": "0", + "max-magic": "1500", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 2250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 742.5, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "The World Wakes", + "slayer-exp": 1804, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "840", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kal'gerion demon (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Bloodchiller", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Pummeller", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Riftsplitter", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Warmonger", + "slayer-exp": 3404, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lesser demon", + "variants": [ + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "480", + "max-necromancy": "0" + } + ] + }, + { + "name": "Revenant demon", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "1125", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 175, + "lifepoints": "7500", + "max-ranged": "1125", + "max-magic": "1125", + "max-necromancy": "0" + }] + }, + { + "name": "Ripper Demon", + "variants": [{ + "image": "", + "level": "131", + "defence": "90", + "slayer-level": "96", + "experience": 1678.0999755859375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 553.7000122070312, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Default", + "slayer-exp": 2721.60009765625, + "lifepoints": "33563", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Tormented demon", + "variants": [ + { + "image": "", + "level": "119", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Standard", + "slayer-exp": 1136, + "lifepoints": "20000", + "max-ranged": "1150", + "max-magic": "1150", + "max-necromancy": "0" + }, + { + "image": "", + "level": "119", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "950", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "While Guthix Sleeps", + "slayer-exp": 1136, + "lifepoints": "20000", + "max-ranged": "1150", + "max-magic": "1150", + "max-necromancy": "0" + } + ] + }, + { + "name": "Tstanon Karlak", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "365", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 272.79998779296875, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Yor'Ger the Deceiver", + "variants": [ + { + "image": "", + "level": "200", + "defence": "72", + "slayer-level": "0", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "1425", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 11368, + "lifepoints": "180000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "?" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zakl'n Gritch", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 375, + "susceptible": ["<\/a>"], + "lifepoint-exp": 123.69999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 150, + "lifepoints": "7500", + "max-ranged": "365", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Desert Lizard", + "variants": [ + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "22", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Green", + "slayer-exp": 21.600000381469727, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "22", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Yellow", + "slayer-exp": 21.600000381469727, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "22", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 21.600000381469727, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lizard", + "variants": [{ + "image": "", + "level": "40", + "defence": "29", + "slayer-level": "22", + "experience": 232.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 76.69999694824219, + "max-melee": "580", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 54.79999923706055, + "lifepoints": "4650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Small Lizard", + "variants": [ + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "22", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Green", + "slayer-exp": 9.600000381469727, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "22", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Yellow", + "slayer-exp": 9.600000381469727, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Desert strykewyrm", + "variants": [{ + "image": "", + "level": "103", + "defence": "74", + "slayer-level": "77", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "710", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "Default", + "slayer-exp": 376.6000061035156, + "lifepoints": "10000", + "max-ranged": "710", + "max-magic": "710", + "max-necromancy": "0" + }] + }, + { + "name": "Baby Dinosaur Skeleton", + "variants": [] + }, + { + "name": "Brutish dinosaur", + "variants": [ + { + "image": "", + "level": "164", + "defence": "80", + "slayer-level": "99", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "2757", + "name": "Normal", + "slayer-exp": 3100, + "lifepoints": "70000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "164", + "defence": "80", + "slayer-level": "99", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "2757", + "name": "Dinosaur invasion", + "slayer-exp": 3100, + "lifepoints": "70000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Feral Dinosaur", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "90", + "experience": 2250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 742.5, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 1810, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "N/A", + "experience": 2250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 742.5, + "max-melee": "1224", + "weakness": [], + "max-spec": "N/A", + "name": "Dinosaur invasion", + "slayer-exp": -2, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Orikalka", + "variants": [{ + "image": "", + "level": "888", + "defence": "96", + "slayer-level": "1", + "experience": 4750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1567.5, + "max-melee": "3129", + "weakness": ["<\/a>"], + "max-spec": "4500", + "name": "Default", + "slayer-exp": 4500, + "lifepoints": "190000", + "max-ranged": "0", + "max-magic": "4500", + "max-necromancy": "0" + }] + }, + { + "name": "Osseous", + "variants": [{ + "image": "", + "level": "888", + "defence": "90", + "slayer-level": "1", + "experience": 17500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 5775, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "5100", + "name": "Default", + "slayer-exp": 394, + "lifepoints": "350000", + "max-ranged": "?", + "max-magic": "0", + "max-necromancy": "3129" + }] + }, + { + "name": "Pthentraken", + "variants": [{ + "image": "", + "level": "888", + "defence": "96", + "slayer-level": "1", + "experience": 4750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1567.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "5500", + "name": "Default", + "slayer-exp": 4545, + "lifepoints": "190000", + "max-ranged": "3500", + "max-magic": "3129", + "max-necromancy": "0" + }] + }, + { + "name": "Rathis", + "variants": [{ + "image": "", + "level": "888", + "defence": "96", + "slayer-level": "1", + "experience": 4750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1567.5, + "max-melee": "3129", + "weakness": ["<\/a>"], + "max-spec": "4500", + "name": "Default", + "slayer-exp": 4545, + "lifepoints": "190000", + "max-ranged": "3500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ripper dinosaur", + "variants": [ + { + "image": "", + "level": "176", + "defence": "80", + "slayer-level": "114", + "experience": 3250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1072.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 1904, + "lifepoints": "65000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "176", + "defence": "80", + "slayer-level": "N/A", + "experience": 3250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1072.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Dinosaur invasion", + "slayer-exp": -2, + "lifepoints": "65000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Venomous dinosaur", + "variants": [ + { + "image": "", + "level": "172", + "defence": "80", + "slayer-level": "105", + "experience": 1750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 577.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal", + "slayer-exp": 1332, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "172", + "defence": "80", + "slayer-level": "N/A", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Dinosaur invasion", + "slayer-exp": -2, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Guard dog", + "variants": [{ + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 60, + "susceptible": ["<\/a>"], + "lifepoint-exp": 19.799999237060547, + "max-melee": "96", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 13.399999618530273, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jackal", + "variants": [{ + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 175, + "susceptible": ["<\/a>"], + "lifepoint-exp": 57.70000076293945, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 43.20000076293945, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Shadow Hound", + "variants": [{ + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": ["<\/a>"], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 39.400001525878906, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Wild dog", + "variants": [{ + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": [], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Baby red dragon", + "variants": [{ + "image": "", + "level": "47", + "defence": "34", + "slayer-level": "1", + "experience": 85, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28, + "max-melee": "136", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 20.600000381469727, + "lifepoints": "1700", + "max-ranged": "0", + "max-magic": "136", + "max-necromancy": "0" + }] + }, + { + "name": "Black stone dragon", + "variants": [{ + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 16250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 5362.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 37600, + "lifepoints": "650000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Brutal green dragon", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "1250", + "max-necromancy": "0" + }] + }, + { + "name": "Dragonstone dragon", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "95", + "experience": 2000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 660, + "max-melee": "1561", + "weakness": ["<\/a>"], + "max-spec": "1561", + "name": "Default", + "slayer-exp": 1448.4000244140625, + "lifepoints": "40000", + "max-ranged": "0", + "max-magic": "1561", + "max-necromancy": "0" + }] + }, + { + "name": "Dragonstone dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "111", + "defence": "75", + "slayer-level": "1", + "experience": 2750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 907.5, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 5100, + "lifepoints": "55000", + "max-ranged": "1224", + "max-magic": "1224", + "max-necromancy": "0" + }] + }, + { + "name": "Green dragon", + "variants": [ + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "1", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "2", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "3", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "4", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "5", + "slayer-exp": 68.5999984741211, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "297", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hydrix dragon", + "variants": [{ + "image": "", + "level": "133", + "defence": "95", + "slayer-level": "101", + "experience": 3000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 990, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "3900", + "name": "Default", + "slayer-exp": 4768.7998046875, + "lifepoints": "60000", + "max-ranged": "0", + "max-magic": "1745", + "max-necromancy": "0" + }] + }, + { + "name": "Hydrix dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "118", + "defence": "75", + "slayer-level": "1", + "experience": 3750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1237.5, + "max-melee": "1745", + "weakness": ["<\/a>"], + "max-spec": "3900", + "name": "Default", + "slayer-exp": 17000, + "lifepoints": "75000", + "max-ranged": "1745", + "max-magic": "1745", + "max-necromancy": "0" + }] + }, + { + "name": "Iron dragon", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 123.69999694824219, + "max-melee": "488", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 245, + "lifepoints": "7500", + "max-ranged": "0", + "max-magic": "488", + "max-necromancy": "0" + }] + }, + { + "name": "Mithril dragon", + "variants": [{ + "image": "", + "level": "112", + "defence": "85", + "slayer-level": "1", + "experience": 890, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 293.70001220703125, + "max-melee": "1068", + "weakness": ["<\/a>"], + "max-spec": "2700", + "name": "Default", + "slayer-exp": 564.4000244140625, + "lifepoints": "17800", + "max-ranged": "1068", + "max-magic": "1068", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon artificer", + "variants": [{ + "image": "", + "level": "120", + "defence": "94", + "slayer-level": "92", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1598", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon engineer", + "variants": [{ + "image": "", + "level": "150", + "defence": "95", + "slayer-level": "92", + "experience": 6250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2062.5, + "max-melee": "1506", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 2769, + "lifepoints": "50000", + "max-ranged": "1506", + "max-magic": "1506", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon guard", + "variants": [{ + "image": "", + "level": "120", + "defence": "94", + "slayer-level": "92", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "1598", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nodon hunter", + "variants": [{ + "image": "", + "level": "120", + "defence": "94", + "slayer-level": "92", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "30000", + "max-ranged": "1598", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Onyx dragon", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "98", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "1653.8", + "name": "Default", + "slayer-exp": 1858.800048828125, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Onyx dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 3000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 990, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 6050, + "lifepoints": "60000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Red dragon", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "396", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "396", + "max-necromancy": "0" + } + ] + }, + { + "name": "Red dragon (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 1450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 478.5, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1227, + "lifepoints": "29000", + "max-ranged": "1080", + "max-magic": "1080", + "max-necromancy": "0" + }] + }, + { + "name": "Rune dragon", + "variants": [ + { + "image": "", + "level": "127", + "defence": "90", + "slayer-level": "76", + "experience": 3412.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1126.0999755859375, + "max-melee": "1820", + "weakness": ["<\/a>"], + "max-spec": "10000", + "name": "Armoured", + "slayer-exp": 2051, + "lifepoints": "68250", + "max-ranged": "1820", + "max-magic": "1820", + "max-necromancy": "0" + }, + { + "image": "", + "level": "127", + "defence": "90", + "slayer-level": "76", + "experience": 3412.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1126.0999755859375, + "max-melee": "1820", + "weakness": ["<\/a>"], + "max-spec": "10000", + "name": "Unarmoured", + "slayer-exp": 2051, + "lifepoints": "68250", + "max-ranged": "1820", + "max-magic": "1820", + "max-necromancy": "0" + } + ] + }, + { + "name": "Sangri the Red", + "variants": [{ + "image": "", + "level": "131", + "defence": "94", + "slayer-level": "1", + "experience": 8750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2887.5, + "max-melee": "1353", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 14077, + "lifepoints": "175000", + "max-ranged": "1353", + "max-magic": "1353", + "max-necromancy": "0" + }] + }, + { + "name": "Siege engine", + "variants": [{ + "image": "", + "level": "150", + "defence": "90", + "slayer-level": "92", + "experience": 2400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 792, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1505, + "lifepoints": "30000", + "max-ranged": "1653", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Steel dragon", + "variants": [{ + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "1", + "experience": 500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 165, + "max-melee": "508", + "weakness": ["<\/a>"], + "max-spec": "2100", + "name": "Default", + "slayer-exp": 350, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "508", + "max-necromancy": "0" + }] + }, + { + "name": "Dust devil", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "65", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 192.8000030517578, + "lifepoints": "8000", + "max-ranged": "244", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dust devil (elite)", + "variants": [{ + "image": "", + "level": "95", + "defence": "61", + "slayer-level": "65", + "experience": 1600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 528, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 684, + "lifepoints": "32000", + "max-ranged": "732", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Earth warrior", + "variants": [{ + "image": "", + "level": "61", + "defence": "56", + "slayer-level": "1", + "experience": 482.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 159.1999969482422, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 57.5, + "lifepoints": "9650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Earth warrior (elite)", + "variants": [{ + "image": "", + "level": "75", + "defence": "56", + "slayer-level": "1", + "experience": 1630, + "susceptible": ["<\/a>"], + "lifepoint-exp": 537.9000244140625, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 295, + "lifepoints": "32600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cadarn magus", + "variants": [{ + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "1791", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "1083", + "max-necromancy": "0" + }] + }, + { + "name": "Cadarn ranger", + "variants": [{ + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "1300", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "1083", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Elf warrior", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": ["<\/a>"], + "lifepoint-exp": 49.5, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee", + "slayer-exp": 73.5999984741211, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 160, + "susceptible": ["<\/a>"], + "lifepoint-exp": 52.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Range", + "slayer-exp": 89.4000015258789, + "lifepoints": "3200", + "max-ranged": "256", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Iorwerth guard", + "variants": [{ + "image": "", + "level": "122", + "defence": "90", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "1899", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Iorwerth scout", + "variants": [{ + "image": "", + "level": "122", + "defence": "75", + "slayer-level": "1", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 608, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Knight of Ardougne (West Ardougne)", + "variants": [ + { + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 80, + "susceptible": ["<\/a>"], + "lifepoint-exp": 26.399999618530273, + "max-melee": "96", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Surface", + "slayer-exp": 0, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 203.3000030517578, + "susceptible": ["<\/a>"], + "lifepoint-exp": 67, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Mourner Tunnels", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mourner (Mourner Tunnels)", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Seren archer", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Seren mage", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "980", + "max-necromancy": "0" + }] + }, + { + "name": "Seren warrior", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fetid zombie", + "variants": [ + { + "image": "", + "level": "66", + "defence": "45", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 100, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "66", + "defence": "45", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 100, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Fever spider", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "42", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "740", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 86.5999984741211, + "lifepoints": "4200", + "max-ranged": "840", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fire giant", + "variants": [{ + "image": "", + "level": "85", + "defence": "62", + "slayer-level": "1", + "experience": 335, + "susceptible": ["<\/a>"], + "lifepoint-exp": 110.5, + "max-melee": "335", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 161.1999969482422, + "lifepoints": "6700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Flesh Crawler", + "variants": [{ + "image": "", + "level": "26", + "defence": "22", + "slayer-level": "1", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 50, + "lifepoints": "3600", + "max-ranged": "320", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Big frog", + "variants": [{ + "image": "", + "level": "18", + "defence": "20", + "slayer-level": "1", + "experience": 165, + "susceptible": ["<\/a>"], + "lifepoint-exp": 54.400001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 14.399999618530273, + "lifepoints": "3300", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Frog", + "variants": [{ + "image": "", + "level": "67", + "defence": "55", + "slayer-level": "1", + "experience": 235, + "susceptible": ["<\/a>"], + "lifepoint-exp": 77.5, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 54.79999923706055, + "lifepoints": "4700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Frogeel", + "variants": [{ + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.400001525878906, + "lifepoints": "8200", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant frog", + "variants": [{ + "image": "", + "level": "33", + "defence": "32", + "slayer-level": "1", + "experience": 255, + "susceptible": ["<\/a>"], + "lifepoint-exp": 84.0999984741211, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 18.799999237060547, + "lifepoints": "5100", + "max-ranged": "300", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Plague frog", + "variants": [{ + "image": "", + "level": "17", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.200000762939453, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Swamp frog", + "variants": [{ + "image": "", + "level": "11", + "defence": "12", + "slayer-level": "1", + "experience": 55, + "susceptible": ["<\/a>"], + "lifepoint-exp": 18.100000381469727, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10, + "lifepoints": "1100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fungal mage", + "variants": [ + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 63.599998474121094, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "232", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": ["<\/a>"], + "lifepoint-exp": 47.79999923706055, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Weakened", + "slayer-exp": 63.599998474121094, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "116", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ganodermic beast", + "variants": [ + { + "image": "", + "level": "112", + "defence": "70", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 565, + "lifepoints": "12500", + "max-ranged": "0", + "max-magic": "332", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "60", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 565, + "lifepoints": "12500", + "max-ranged": "0", + "max-magic": "166", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ganodermic runt", + "variants": [ + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 564.4000244140625, + "lifepoints": "12500", + "max-ranged": "332", + "max-magic": "332", + "max-necromancy": "0" + }, + { + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "95", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 564.4000244140625, + "lifepoints": "12500", + "max-ranged": "166", + "max-magic": "166", + "max-necromancy": "0" + } + ] + }, + { + "name": "Gelatinous abomination", + "variants": [{ + "image": "", + "level": "2", + "defence": "1", + "slayer-level": "1", + "experience": 25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8.199999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19, + "lifepoints": "500", + "max-ranged": "0", + "max-magic": "60", + "max-necromancy": "0" + }] + }, + { + "name": "Ahrim the Blighted", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "1260", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "864", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ritual of the Mahjarrat", + "slayer-exp": 395, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "864", + "max-necromancy": "0" + } + ] + }, + { + "name": "Akrisae the Doomed", + "variants": [ + { + "image": "", + "level": "115", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Barrows", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "2167", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Gregorovic", + "slayer-exp": -1, + "lifepoints": "1000000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "70", + "slayer-level": "?", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sliske's Endgame", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dharok the Wretched", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "3150", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3150", + "name": "Ritual of the Mahjarrat", + "slayer-exp": 395, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3150", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghast", + "variants": [ + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "150", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Regular", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "28", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Easy Route)", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "63", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Medium Route)", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Hard Route)", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghost", + "variants": [ + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + }, + { + "image": "", + "level": "25", + "defence": "18", + "slayer-level": "1", + "experience": 59.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 19.600000381469727, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "7", + "slayer-exp": 10, + "lifepoints": "900", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghost (Abandoned Mine)", + "variants": [{ + "image": "", + "level": "42", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ghost (Ourania Runecrafting Altar)", + "variants": [] + }, + { + "name": "Ghost (Shattered Worlds)", + "variants": [] + }, + { + "name": "Ghost (Spirit of Summer)", + "variants": [] + }, + { + "name": "Ghost (Stronghold of Security)", + "variants": [ + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 69, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghost healer", + "variants": [] + }, + { + "name": "Ghostly troll bruiser", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 20.799999237060547, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ghostly troll thrower", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 20.799999237060547, + "lifepoints": "1800", + "max-ranged": "100", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ghostly warrior", + "variants": [{ + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "1", + "experience": 110, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 36.29999923706055, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 32.599998474121094, + "lifepoints": "2200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Guthan the Infested", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 881.4000244140625, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 290.79998779296875, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ritual of the Mahjarrat", + "slayer-exp": -1, + "lifepoints": "3750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 7149.60009765625, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2359.300048828125, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Karil the Tainted", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "1260", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "864", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Linza the Disgraced", + "variants": [ + { + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "1", + "experience": 3750, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1237.5, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Barrows", + "slayer-exp": 440, + "lifepoints": "150000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sliske's Endgame", + "slayer-exp": -1, + "lifepoints": "150000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Masuta the Descended", + "variants": [{ + "image": "", + "level": "1000", + "defence": "85", + "slayer-level": "?", + "experience": 9750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3217.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "195000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant cyclops", + "variants": [{ + "image": "", + "level": "60", + "defence": "43", + "slayer-level": "1", + "experience": 322.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 106.4000015258789, + "max-melee": "967", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 93.19999694824219, + "lifepoints": "6450", + "max-ranged": "967", + "max-magic": "967", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant dragon", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 517.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 170.6999969482422, + "max-melee": "1552", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 712.4000244140625, + "lifepoints": "10350", + "max-ranged": "1552", + "max-magic": "1552", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant goblin", + "variants": [ + { + "image": "", + "level": "16", + "defence": "12", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "270", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "16", + "slayer-exp": 27.799999237060547, + "lifepoints": "1800", + "max-ranged": "270", + "max-magic": "270", + "max-necromancy": "0" + }, + { + "image": "", + "level": "19", + "defence": "20", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "19", + "slayer-exp": 28.399999618530273, + "lifepoints": "3000", + "max-ranged": "450", + "max-magic": "450", + "max-necromancy": "0" + }, + { + "image": "", + "level": "22", + "defence": "20", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "22", + "slayer-exp": 29.600000381469727, + "lifepoints": "3000", + "max-ranged": "450", + "max-magic": "450", + "max-necromancy": "0" + }, + { + "image": "", + "level": "28", + "defence": "20", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "28", + "slayer-exp": 34.599998474121094, + "lifepoints": "3000", + "max-ranged": "450", + "max-magic": "450", + "max-necromancy": "0" + } + ] + }, + { + "name": "Revenant hellhound", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 352.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 116.30000305175781, + "max-melee": "1057", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 122.19999694824219, + "lifepoints": "7050", + "max-ranged": "1057", + "max-magic": "1057", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant hobgoblin", + "variants": [{ + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 240, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 79.19999694824219, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 56.599998474121094, + "lifepoints": "4800", + "max-ranged": "720", + "max-magic": "720", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant icefiend", + "variants": [{ + "image": "", + "level": "37", + "defence": "27", + "slayer-level": "1", + "experience": 202.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 66.80000305175781, + "max-melee": "607", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 45.599998474121094, + "lifepoints": "4050", + "max-ranged": "607", + "max-magic": "607", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant imp", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 75, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 24.700000762939453, + "max-melee": "225", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 25, + "lifepoints": "1500", + "max-ranged": "225", + "max-magic": "225", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant knight", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 160.8000030517578, + "max-melee": "1462", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 552.7999877929688, + "lifepoints": "9750", + "max-ranged": "1462", + "max-magic": "1462", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant ork", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 412.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 136.10000610351562, + "max-melee": "1237", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 269.20001220703125, + "lifepoints": "8250", + "max-ranged": "1237", + "max-magic": "1237", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant pyrefiend", + "variants": [{ + "image": "", + "level": "40", + "defence": "29", + "slayer-level": "1", + "experience": 217.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 71.69999694824219, + "max-melee": "652", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 50.20000076293945, + "lifepoints": "4350", + "max-ranged": "652", + "max-magic": "652", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant vampyre", + "variants": [{ + "image": "", + "level": "47", + "defence": "34", + "slayer-level": "1", + "experience": 255, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 84.0999984741211, + "max-melee": "765", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 62.20000076293945, + "lifepoints": "5100", + "max-ranged": "765", + "max-magic": "765", + "max-necromancy": "0" + }] + }, + { + "name": "Revenant werewolf", + "variants": [{ + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 285, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 94, + "max-melee": "855", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 74.4000015258789, + "lifepoints": "5700", + "max-ranged": "855", + "max-magic": "855", + "max-necromancy": "0" + }] + }, + { + "name": "Risen ghost", + "variants": [{ + "image": "", + "level": "101", + "defence": "70", + "slayer-level": "85", + "experience": 1500, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1000, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1117", + "max-necromancy": "0" + }] + }, + { + "name": "Shade", + "variants": [{ + "image": "", + "level": "52", + "defence": "44", + "slayer-level": "1", + "experience": 362.5, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 119.5999984741211, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "7250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Shadow warrior", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 390, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 128.6999969482422, + "max-melee": "940", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 113, + "lifepoints": "7800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Torag the Corrupted", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Normal", + "slayer-exp": 395, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Tormented soul (Uncharted Isles)", + "variants": [{ + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 98.5999984741211, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + }] + }, + { + "name": "Tormented wraith", + "variants": [{ + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "270", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 52, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "120", + "max-necromancy": "0" + }] + }, + { + "name": "Tortured soul (Port Phasmatys)", + "variants": [{ + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "114", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 38.79999923706055, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "152", + "max-necromancy": "0" + }] + }, + { + "name": "Verac the Defiled", + "variants": [ + { + "image": "", + "level": "150", + "defence": "70", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "1260", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "650", + "defence": "90", + "slayer-level": "1", + "experience": 1250, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 412.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Rise of the Six", + "slayer-exp": 0, + "lifepoints": "50000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Wight", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Wight (Missing, Presumed Death)", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 17.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 5.699999809265137, + "max-melee": "25", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "350", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Wight ranger", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Wight ranger (Sliske's Endgame)", + "variants": [ + { + "image": "", + "level": "78", + "defence": "?", + "slayer-level": "1", + "experience": 206.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 68, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78", + "slayer-exp": -1, + "lifepoints": "4125", + "max-ranged": "192", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "?", + "slayer-level": "1", + "experience": 206.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 68, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78 (Weak in slash)", + "slayer-exp": -1, + "lifepoints": "4125", + "max-ranged": "1676.3", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "85", + "defence": "?", + "slayer-level": "1", + "experience": 206.25, + "susceptible": ["<\/a>"], + "lifepoint-exp": 68, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "85", + "slayer-exp": -1, + "lifepoints": "4125", + "max-ranged": "384", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Ghoul", + "variants": [ + { + "image": "", + "level": "50", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 35.79999923706055, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "50", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Blue", + "slayer-exp": 35.79999923706055, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ghoul (Paterdomus)", + "variants": [{ + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 60, + "susceptible": ["<\/a>"], + "lifepoint-exp": 19.799999237060547, + "max-melee": "96", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ravenous ghoul", + "variants": [{ + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 725, + "susceptible": ["<\/a>"], + "lifepoint-exp": 239.1999969482422, + "max-melee": "595", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "14500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ravenous ghoul (Mazchna)", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 475, + "susceptible": ["<\/a>"], + "lifepoint-exp": 156.6999969482422, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 440, + "lifepoints": "9500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Arch-Glacor", + "variants": [ + { + "image": "", + "level": "7000", + "defence": "75", + "slayer-level": "1", + "experience": 1625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 536.2000122070312, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Hard mode", + "slayer-exp": 4810, + "lifepoints": "65000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7000", + "defence": "75", + "slayer-level": "1", + "experience": 1625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 536.2000122070312, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Normal mode", + "slayer-exp": 4810, + "lifepoints": "65000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bolstered Glacyte", + "variants": [{ + "image": "", + "level": "131", + "defence": "90", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "950", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1250", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "?" + }] + }, + { + "name": "Enduring glacyte", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 333.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 109.9000015258789, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Glacor", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 2000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 660, + "max-melee": "1266", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 1881, + "lifepoints": "40000", + "max-ranged": "1266", + "max-magic": "1266", + "max-necromancy": "0" + }] + }, + { + "name": "Glacyte", + "variants": [ + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "84", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee", + "slayer-exp": 182, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "84", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic", + "slayer-exp": 182, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Glacyte (Arch-Glacor)", + "variants": [ + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "0", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee", + "slayer-exp": -1, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "80", + "slayer-level": "0", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic", + "slayer-exp": -1, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Sapping glacyte", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 333.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 109.9000015258789, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Unstable glacyte", + "variants": [{ + "image": "", + "level": "114", + "defence": "75", + "slayer-level": "1", + "experience": 333.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 109.9000015258789, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 0, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Angry goblin", + "variants": [ + { + "image": "", + "level": "45", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A Soul's Bane", + "slayer-exp": 0, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Brokeface", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": ["<\/a>"], + "lifepoint-exp": 29.700000762939453, + "max-melee": "150", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cave goblin (monster)", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Cave goblin guard", + "variants": [ + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.300000190734863, + "max-melee": "60", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Club", + "slayer-exp": 9.600000381469727, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.300000190734863, + "max-melee": "60", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Spear", + "slayer-exp": 9.600000381469727, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Cave goblin miner", + "variants": [ + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 12.5, + "susceptible": [], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Mining", + "slayer-exp": 6.800000190734863, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 12.5, + "susceptible": [], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Slacking off", + "slayer-exp": 6.800000190734863, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin", + "variants": [ + { + "image": "", + "level": "2", + "defence": "2", + "slayer-level": "1", + "experience": 27.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 9, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 2", + "slayer-exp": -1, + "lifepoints": "550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 5", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 87.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 28.799999237060547, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 11", + "slayer-exp": -1, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 1 (Slayer challenge)", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 10, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3.299999952316284, + "max-melee": "16", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 5 (Slayer challenge)", + "slayer-exp": -1, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "32", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Level 11 (Slayer challenge)", + "slayer-exp": -1, + "lifepoints": "400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin (Goblin Village)", + "variants": [ + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (1)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (2)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (3)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (4)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (5)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Red (6)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (1)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (2)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (3)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (4)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (5)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Green (6)", + "slayer-exp": 6.599999904632568, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin (God Wars Dungeon)", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Sword", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Warhammer", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Banner", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Spear", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Battleaxe", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Goblin (Stronghold of Security)", + "variants": [ + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (a)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (b)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (c)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (d)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (e)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "80", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 5 (f)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Guard (cave goblin)", + "variants": [ + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Club", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Spear", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lumpnose", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": ["<\/a>"], + "lifepoint-exp": 29.700000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1800", + "max-ranged": "150", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sergeant Grimspike", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 273.70001220703125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.30000305175781, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 199.1999969482422, + "lifepoints": "5475", + "max-ranged": "365", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sergeant Steelwill", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 273.70001220703125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.30000305175781, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 199.1999969482422, + "lifepoints": "5475", + "max-ranged": "0", + "max-magic": "365", + "max-necromancy": "0" + }] + }, + { + "name": "Sergeant Strongstack", + "variants": [{ + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 273.70001220703125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.30000305175781, + "max-melee": "365", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 199.1999969482422, + "lifepoints": "5475", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skoblin", + "variants": [{ + "image": "", + "level": "19", + "defence": "14", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9.399999618530273, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Stinkears", + "variants": [{ + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 90, + "susceptible": ["<\/a>"], + "lifepoint-exp": 29.700000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "150", + "max-necromancy": "0" + }] + }, + { + "name": "Gorak", + "variants": [ + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": ["<\/a>"], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Gorak Plane", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 598.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 197.5, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon", + "slayer-exp": 207.39999389648438, + "lifepoints": "6800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 598.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 197.5, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": -1, + "lifepoints": "6800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Butcher demon", + "variants": [{ + "image": "", + "level": "118", + "defence": "80", + "slayer-level": "1", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 5680.2001953125, + "lifepoints": "100000", + "max-ranged": "1653", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Champion of Infernus", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1136, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "816", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Demon", + "variants": [{ + "image": "", + "level": "100", + "defence": "80", + "slayer-level": "1", + "experience": 750, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 247.5, + "max-melee": "2212", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "15000", + "max-ranged": "2212", + "max-magic": "2212", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Demon Savage", + "variants": [{ + "image": "", + "level": "141", + "defence": "110", + "slayer-level": "1", + "experience": 3500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1155, + "max-melee": "2011", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "70000", + "max-ranged": "1564", + "max-magic": "1564", + "max-necromancy": "0" + }] + }, + { + "name": "Denizen of Infernus", + "variants": [{ + "image": "", + "level": "127", + "defence": "70", + "slayer-level": "1", + "experience": 6000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1980, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10000, + "lifepoints": "120000", + "max-ranged": "864", + "max-magic": "1656", + "max-necromancy": "0" + }] + }, + { + "name": "Greater demon (elite)", + "variants": [{ + "image": "", + "level": "92", + "defence": "59", + "slayer-level": "1", + "experience": 1200, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 396, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 619.7999877929688, + "lifepoints": "24000", + "max-ranged": "0", + "max-magic": "1065", + "max-necromancy": "0" + }] + }, + { + "name": "Kor'Vath the Blightbringer", + "variants": [ + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "140,000 life points", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "170,000 life points", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "400,000 life points", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + } + ] + }, + { + "name": "La'Kalor the Unbroken", + "variants": [{ + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }] + }, + { + "name": "Shara'Kor the Widowmaker", + "variants": [{ + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "?", + "experience": 5000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "566.4", + "max-necromancy": "0" + }] + }, + { + "name": "Grifolapine", + "variants": [ + { + "image": "", + "level": "103", + "defence": "74", + "slayer-level": "88", + "experience": 370, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.0999984741211, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 279, + "lifepoints": "7400", + "max-ranged": "296", + "max-magic": "296", + "max-necromancy": "0" + }, + { + "image": "", + "level": "103", + "defence": "74", + "slayer-level": "88", + "experience": 370, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.0999984741211, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 279, + "lifepoints": "7400", + "max-ranged": "148", + "max-magic": "148", + "max-necromancy": "0" + } + ] + }, + { + "name": "Grifolaroo", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "82", + "experience": 385, + "susceptible": ["<\/a>"], + "lifepoint-exp": 127, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 323.20001220703125, + "lifepoints": "7700", + "max-ranged": "308", + "max-magic": "308", + "max-necromancy": "0" + }, + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "82", + "experience": 385, + "susceptible": ["<\/a>"], + "lifepoint-exp": 127, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Neem oil", + "slayer-exp": 323.20001220703125, + "lifepoints": "7700", + "max-ranged": "154", + "max-magic": "154", + "max-necromancy": "0" + } + ] + }, + { + "name": "Giant worm", + "variants": [{ + "image": "", + "level": "72", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 117.4000015258789, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "600", + "max-necromancy": "0" + }] + }, + { + "name": "Grotworm", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 372.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.9000015258789, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 102.80000305175781, + "lifepoints": "7450", + "max-ranged": "0", + "max-magic": "900", + "max-necromancy": "0" + }] + }, + { + "name": "Mature grotworm", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 640, + "susceptible": ["<\/a>"], + "lifepoint-exp": 211.1999969482422, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 343.6000061035156, + "lifepoints": "12800", + "max-ranged": "0", + "max-magic": "1400", + "max-necromancy": "0" + }] + }, + { + "name": "Young grotworm", + "variants": [{ + "image": "", + "level": "28", + "defence": "20", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 11.399999618530273, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "400", + "max-necromancy": "0" + }] + }, + { + "name": "Harpie Bug Swarm", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "33", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 34, + "lifepoints": "2250", + "max-ranged": "180", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Harpie Bug Swarm (elite)", + "variants": [{ + "image": "", + "level": "72", + "defence": "45", + "slayer-level": "33", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 313, + "lifepoints": "9000", + "max-ranged": "540", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound", + "variants": [ + { + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 165, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 54.400001525878906, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 93.80000305175781, + "lifepoints": "3300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "75", + "slayer-level": "1", + "experience": 475, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 156.6999969482422, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon", + "slayer-exp": 207.39999389648438, + "lifepoints": "9500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "105", + "defence": "75", + "slayer-level": "1", + "experience": 475, + "susceptible": ["<\/a>"], + "lifepoint-exp": 156.6999969482422, + "max-melee": "1080", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 105", + "slayer-exp": 371, + "lifepoints": "9500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hellhound (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound (The Zamorakian Undercity)", + "variants": [{ + "image": "", + "level": "104", + "defence": "66", + "slayer-level": "1", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 800, + "lifepoints": "9000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound (summoned)", + "variants": [{ + "image": "", + "level": "104", + "defence": "66", + "slayer-level": "1", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "9000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound Alpha", + "variants": [{ + "image": "", + "level": "113", + "defence": "66", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "1584", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "20000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound Hunter", + "variants": [{ + "image": "", + "level": "111", + "defence": "66", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hellhound Hunter (summoned)", + "variants": [{ + "image": "", + "level": "111", + "defence": "66", + "slayer-level": "1", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "12000", + "max-ranged": "14", + "max-magic": "14", + "max-necromancy": "0" + }] + }, + { + "name": "Hill Giant", + "variants": [{ + "image": "", + "level": "26", + "defence": "22", + "slayer-level": "1", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 37.599998474121094, + "lifepoints": "4500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Hobgoblin", + "variants": [ + { + "image": "", + "level": "15", + "defence": "10", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 15", + "slayer-exp": 35, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "12", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18", + "slayer-exp": 39, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 487.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 160.8000030517578, + "max-melee": "325", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 91 (GWD)", + "slayer-exp": 268.6000061035156, + "lifepoints": "9750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hobgoblin (elite)", + "variants": [{ + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 252.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 83.30000305175781, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "5050", + "max-ranged": "460", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice giant", + "variants": [ + { + "image": "", + "level": "47", + "defence": "37", + "slayer-level": "1", + "experience": 372.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.9000015258789, + "max-melee": "750", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 47 (1)", + "slayer-exp": 80.80000305175781, + "lifepoints": "7450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "47", + "defence": "37", + "slayer-level": "1", + "experience": 372.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 122.9000015258789, + "max-melee": "750", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 47 (2)", + "slayer-exp": 80.80000305175781, + "lifepoints": "7450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice strykewyrm", + "variants": [{ + "image": "", + "level": "106", + "defence": "76", + "slayer-level": "93", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "729", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "Default", + "slayer-exp": 693.2000122070312, + "lifepoints": "25000", + "max-ranged": "729", + "max-magic": "729", + "max-necromancy": "0" + }] + }, + { + "name": "Ice warrior", + "variants": [ + { + "image": "", + "level": "40", + "defence": "26", + "slayer-level": "1", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "640", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 25.799999237060547, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "26", + "slayer-level": "1", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "640", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ice Queen's Lair", + "slayer-exp": 25.799999237060547, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Icelord", + "variants": [ + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 75, + "susceptible": ["<\/a>"], + "lifepoint-exp": 24.700000762939453, + "max-melee": "90", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "ranged", + "slayer-exp": 60, + "lifepoints": "1500", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 75, + "susceptible": ["<\/a>"], + "lifepoint-exp": 24.700000762939453, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "melee", + "slayer-exp": 60, + "lifepoints": "1500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Icefiend", + "variants": [ + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ice Mountain", + "slayer-exp": 7, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "500", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ice Mountain (melting)", + "slayer-exp": 7, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "500", + "max-necromancy": "0" + } + ] + }, + { + "name": "Icefiend (Ghorrock)", + "variants": [{ + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 362.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 119.5999984741211, + "max-melee": "1540", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 335, + "lifepoints": "7250", + "max-ranged": "1540", + "max-magic": "1540", + "max-necromancy": "0" + }] + }, + { + "name": "Infernal Mage", + "variants": [{ + "image": "", + "level": "63", + "defence": "40", + "slayer-level": "45", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 91, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "1040", + "max-necromancy": "0" + }] + }, + { + "name": "Infernal Mage (elite)", + "variants": [{ + "image": "", + "level": "77", + "defence": "50", + "slayer-level": "45", + "experience": 1050, + "susceptible": ["<\/a>"], + "lifepoint-exp": 346.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 596, + "lifepoints": "21000", + "max-ranged": "0", + "max-magic": "1240", + "max-necromancy": "0" + }] + }, + { + "name": "Jelly", + "variants": [{ + "image": "", + "level": "61", + "defence": "49", + "slayer-level": "52", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 93, + "lifepoints": "8200", + "max-ranged": "760", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jungle horror", + "variants": [{ + "image": "", + "level": "48", + "defence": "30", + "slayer-level": "1", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.5, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Quetzathog", + "variants": [{ + "image": "", + "level": "119", + "defence": "85", + "slayer-level": "0", + "experience": 7275, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2400.699951171875, + "max-melee": "2376", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "145500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea horror", + "variants": [ + { + "image": "", + "level": "119", + "defence": "60", + "slayer-level": "1", + "experience": 4178.2001953125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1378.800048828125, + "max-melee": "482", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal mode", + "slayer-exp": 1388, + "lifepoints": "35500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "119", + "defence": "60", + "slayer-level": "1", + "experience": 887.5, + "susceptible": [], + "lifepoint-exp": 292.79998779296875, + "max-melee": "482", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Story mode", + "slayer-exp": 1388, + "lifepoints": "17750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Jungle strykewyrm", + "variants": [{ + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "73", + "experience": 425, + "susceptible": ["<\/a>"], + "lifepoint-exp": 140.1999969482422, + "max-melee": "643", + "weakness": ["<\/a>"], + "max-spec": "1800", + "name": "Default", + "slayer-exp": 249.8000030517578, + "lifepoints": "8500", + "max-ranged": "643", + "max-magic": "643", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled Kalphite Queen", + "variants": [ + { + "image": "", + "level": "356", + "defence": "75", + "slayer-level": "1", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "First form", + "slayer-exp": 2055, + "lifepoints": "50000", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "356", + "defence": "75", + "slayer-level": "1", + "experience": 2500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 825, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Second form", + "slayer-exp": 2055, + "lifepoints": "50000", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + } + ] + }, + { + "name": "Exiled kalphite guardian", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled kalphite marauder", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 350, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 115.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": 229, + "lifepoints": "7000", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + }, + { + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "1676", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Kalphite King", + "slayer-exp": 229, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "720", + "max-necromancy": "0" + } + ] + }, + { + "name": "Exiled kalphite paragon", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 140, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "240", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled kalphite soldier", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 300, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 99, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 147, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Exiled kalphite worker", + "variants": [{ + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 109.80000305175781, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kalphite Guardian", + "variants": [{ + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 260, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 85.80000305175781, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 95, + "lifepoints": "5200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kalphite King", + "variants": [ + { + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 6500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2145, + "max-melee": "2560", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Magic", + "slayer-exp": 3963, + "lifepoints": "260000", + "max-ranged": "1280", + "max-magic": "2560", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 6500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2145, + "max-melee": "2560", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Melee", + "slayer-exp": 3963, + "lifepoints": "260000", + "max-ranged": "1280", + "max-magic": "2560", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2500", + "defence": "85", + "slayer-level": "1", + "experience": 6500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2145, + "max-melee": "2560", + "weakness": ["<\/a>"], + "max-spec": "2500", + "name": "Ranged", + "slayer-exp": 3963, + "lifepoints": "260000", + "max-ranged": "1280", + "max-magic": "2560", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kalphite Queen", + "variants": [ + { + "image": "", + "level": "333", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "First form", + "slayer-exp": 1309.4000244140625, + "lifepoints": "40000", + "max-ranged": "980", + "max-magic": "980", + "max-necromancy": "0" + }, + { + "image": "", + "level": "333", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Second form", + "slayer-exp": 1309.4000244140625, + "lifepoints": "40000", + "max-ranged": "980", + "max-magic": "980", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kalphite Soldier", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 235, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 77.5, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 75.4000015258789, + "lifepoints": "4700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kalphite Worker", + "variants": [{ + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 210, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 69.30000305175781, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 59.29999923706055, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Killerwatt", + "variants": [{ + "image": "", + "level": "55", + "defence": "44", + "slayer-level": "37", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "450", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 32.599998474121094, + "lifepoints": "3600", + "max-ranged": "510", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kurask", + "variants": [ + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "70", + "experience": 280, + "susceptible": ["<\/a>"], + "lifepoint-exp": 92.4000015258789, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Examine #1", + "slayer-exp": 115, + "lifepoints": "5600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "70", + "experience": 280, + "susceptible": ["<\/a>"], + "lifepoint-exp": 92.4000015258789, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Examine #2", + "slayer-exp": 115, + "lifepoints": "5600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Engorged lava strykewyrm", + "variants": [{ + "image": "", + "level": "113", + "defence": "70", + "slayer-level": "1", + "experience": 9250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3052.5, + "max-melee": "1400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 29105, + "lifepoints": "185000", + "max-ranged": "1400", + "max-magic": "1400", + "max-necromancy": "0" + }] + }, + { + "name": "Lava strykewyrm", + "variants": [{ + "image": "", + "level": "115", + "defence": "80", + "slayer-level": "94", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "1788", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Default", + "slayer-exp": 1872, + "lifepoints": "30000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "Lava strykewyrm (Dragonkin Laboratory)", + "variants": [{ + "image": "", + "level": "101", + "defence": "70", + "slayer-level": "1", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "1117", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 3100, + "lifepoints": "30000", + "max-ranged": "1117", + "max-magic": "1117", + "max-necromancy": "0" + }] + }, + { + "name": "WildyWyrm (2015, historical)", + "variants": [{ + "image": "", + "level": "92", + "defence": "80", + "slayer-level": "1", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "2212", + "weakness": ["<\/a>"], + "max-spec": "4700", + "name": "Default", + "slayer-exp": 16462.599609375, + "lifepoints": "1000000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "0" + }] + }, + { + "name": "Lesser demon (Wizards' Tower)", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 82.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 86.5999984741211, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "200", + "max-necromancy": "0" + }] + }, + { + "name": "Living rock patriarch", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 320, + "lifepoints": "25000", + "max-ranged": "1000", + "max-magic": "1000", + "max-necromancy": "0" + }] + }, + { + "name": "Living rock protector", + "variants": [{ + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 275, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.69999694824219, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 156, + "lifepoints": "5500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Living rock striker", + "variants": [{ + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "1", + "experience": 275, + "susceptible": ["<\/a>"], + "lifepoint-exp": 90.69999694824219, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 156, + "lifepoints": "5500", + "max-ranged": "500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Wyvern", + "variants": [{ + "image": "", + "level": "127", + "defence": "91", + "slayer-level": "96", + "experience": 1125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1310", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1878.800048828125, + "lifepoints": "22500", + "max-ranged": "1310", + "max-magic": "1310", + "max-necromancy": "?" + }] + }, + { + "name": "Wyvern (elite)", + "variants": [{ + "image": "", + "level": "133", + "defence": "95", + "slayer-level": "96", + "experience": 2250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 742.5, + "max-melee": "1339", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 2654, + "lifepoints": "45000", + "max-ranged": "1339", + "max-magic": "1339", + "max-necromancy": "?" + }] + }, + { + "name": "Minotaur", + "variants": [ + { + "image": "", + "level": "12", + "defence": "8", + "slayer-level": "1", + "experience": 87.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 28.799999237060547, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 12", + "slayer-exp": 16.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "15", + "defence": "10", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 15", + "slayer-exp": 46.400001525878906, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 80, + "susceptible": ["<\/a>"], + "lifepoint-exp": 26.399999618530273, + "max-melee": "128", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 44 (Slayer challenge)", + "slayer-exp": -2, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mogre", + "variants": [{ + "image": "", + "level": "45", + "defence": "39", + "slayer-level": "32", + "experience": 315, + "susceptible": ["<\/a>"], + "lifepoint-exp": 103.9000015258789, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 27, + "lifepoints": "6300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Molanisk", + "variants": [{ + "image": "", + "level": "44", + "defence": "38", + "slayer-level": "39", + "experience": 307.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 101.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 49.599998474121094, + "lifepoints": "6150", + "max-ranged": "500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Moss giant", + "variants": [ + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (1)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (2)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (3)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (4)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "40", + "defence": "32", + "slayer-level": "1", + "experience": 320, + "susceptible": ["<\/a>"], + "lifepoint-exp": 105.5999984741211, + "max-melee": "625", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common (5)", + "slayer-exp": 60, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "24", + "defence": "20", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "216", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Glarial's Tomb", + "slayer-exp": 60, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bladed muspah", + "variants": [{ + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "76", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 469, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Force muspah", + "variants": [{ + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "76", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 469, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "500", + "max-necromancy": "0" + }] + }, + { + "name": "Throwing muspah", + "variants": [{ + "image": "", + "level": "150", + "defence": "75", + "slayer-level": "76", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 469, + "lifepoints": "20000", + "max-ranged": "500", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated jadinko baby", + "variants": [{ + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "80", + "experience": 167.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 55.20000076293945, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 98.5999984741211, + "lifepoints": "3350", + "max-ranged": "0", + "max-magic": "268", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated jadinko guard", + "variants": [{ + "image": "", + "level": "96", + "defence": "69", + "slayer-level": "86", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "500", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 188.39999389648438, + "lifepoints": "6000", + "max-ranged": "500", + "max-magic": "500", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated jadinko male", + "variants": [{ + "image": "", + "level": "100", + "defence": "72", + "slayer-level": "91", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 209.60000610351562, + "lifepoints": "6000", + "max-ranged": "600", + "max-magic": "600", + "max-necromancy": "0" + }] + }, + { + "name": "Mutated zygomite", + "variants": [ + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "57", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 58", + "slayer-exp": 31, + "lifepoints": "2100", + "max-ranged": "168", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "57", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 65", + "slayer-exp": 42, + "lifepoints": "2500", + "max-ranged": "188", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nechryael", + "variants": [{ + "image": "", + "level": "96", + "defence": "69", + "slayer-level": "80", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "276", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 251.60000610351562, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nechryael (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "80", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 251.60000610351562, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nechryael (elite)", + "variants": [{ + "image": "", + "level": "106", + "defence": "69", + "slayer-level": "80", + "experience": 1600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 528, + "max-melee": "828", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1120, + "lifepoints": "32000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Nightmare", + "variants": [{ + "image": "", + "level": "128", + "defence": "92", + "slayer-level": "80", + "experience": 1750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 577.5, + "max-melee": "1324", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1540, + "lifepoints": "35000", + "max-ranged": "1324", + "max-magic": "1324", + "max-necromancy": "0" + }] + }, + { + "name": "Blood nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "76", + "experience": 1250, + "susceptible": [], + "lifepoint-exp": 412.5, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "boss", + "slayer-exp": 705.4000244140625, + "lifepoints": "25000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "76", + "experience": 1250, + "susceptible": [], + "lifepoint-exp": 412.5, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "normal", + "slayer-exp": 705.4000244140625, + "lifepoints": "25000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "boss", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "1000", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "normal", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + } + ] + }, + { + "name": "Shadow nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "boss", + "slayer-exp": 423, + "lifepoints": "15000", + "max-ranged": "1000", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "1500", + "name": "normal", + "slayer-exp": 423, + "lifepoints": "15000", + "max-ranged": "768", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Smoke nihil", + "variants": [ + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "boss", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "1000", + "max-necromancy": "0" + }, + { + "image": "", + "level": "160", + "defence": "80", + "slayer-level": "0", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "normal", + "slayer-exp": 564, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "768", + "max-necromancy": "0" + } + ] + }, + { + "name": "Kerapac, the bound", + "variants": [ + { + "image": "", + "level": "3000", + "defence": "80", + "slayer-level": "1", + "experience": 11250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3712.5, + "max-melee": "1339", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Hard mode", + "slayer-exp": 16700, + "lifepoints": "450000", + "max-ranged": "1339", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "3000", + "defence": "80", + "slayer-level": "1", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1339", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 16700, + "lifepoints": "200000", + "max-ranged": "1339", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nodon enforcer", + "variants": [{ + "image": "", + "level": "200", + "defence": "99", + "slayer-level": "92", + "experience": 12500, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 4125, + "max-melee": "1561", + "weakness": ["<\/a>"], + "max-spec": "3300", + "name": "Default", + "slayer-exp": 4003, + "lifepoints": "100000", + "max-ranged": "1561", + "max-magic": "1561", + "max-necromancy": "0" + }] + }, + { + "name": "Enclave guard", + "variants": [{ + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 580, + "susceptible": ["<\/a>"], + "lifepoint-exp": 191.39999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 190, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ogre", + "variants": [ + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 240, + "susceptible": ["<\/a>"], + "lifepoint-exp": 79.19999694824219, + "max-melee": "288", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Kandarin(Level 67)", + "slayer-exp": 88.4000015258789, + "lifepoints": "4800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "56", + "defence": "62", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "310", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Combat Camp(56)", + "slayer-exp": 34, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 465, + "susceptible": ["<\/a>"], + "lifepoint-exp": 153.39999389648438, + "max-melee": "310", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon(86)", + "slayer-exp": 232, + "lifepoints": "9300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ogre chieftain", + "variants": [ + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 612, + "susceptible": ["<\/a>"], + "lifepoint-exp": 201.89999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Version 1", + "slayer-exp": 200, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 612, + "susceptible": ["<\/a>"], + "lifepoint-exp": 201.89999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Version 2", + "slayer-exp": 200, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 612, + "susceptible": ["<\/a>"], + "lifepoint-exp": 201.89999389648438, + "max-melee": "278", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Version 3", + "slayer-exp": 200, + "lifepoints": "11600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ogress", + "variants": [{ + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 33, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ogress champion", + "variants": [{ + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": ["<\/a>"], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 44, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ogress warrior", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 38.20000076293945, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skogre", + "variants": [ + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 26.799999237060547, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 26.799999237060547, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 26.799999237060547, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zogre", + "variants": [ + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Otherworldly being", + "variants": [{ + "image": "", + "level": "55", + "defence": "35", + "slayer-level": "1", + "experience": 282.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 93.19999694824219, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 34, + "lifepoints": "5650", + "max-ranged": "0", + "max-magic": "900", + "max-necromancy": "0" + }] + }, + { + "name": "Pyrefiend", + "variants": [ + { + "image": "", + "level": "38", + "defence": "25", + "slayer-level": "30", + "experience": 202.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 66.80000305175781, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 38", + "slayer-exp": 32.599998474121094, + "lifepoints": "4050", + "max-ranged": "0", + "max-magic": "600", + "max-necromancy": "0" + }, + { + "image": "", + "level": "92", + "defence": "66", + "slayer-level": "30", + "experience": 330, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 108.9000015258789, + "max-melee": "264", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "God Wars Dungeon", + "slayer-exp": -1, + "lifepoints": "6600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Pyrefiend (The Zamorakian Undercity)", + "variants": [{ + "image": "", + "level": "113", + "defence": "75", + "slayer-level": "30", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "576", + "max-magic": "1267", + "max-necromancy": "0" + }] + }, + { + "name": "Pyrefiend (summoned)", + "variants": [{ + "image": "", + "level": "113", + "defence": "75", + "slayer-level": "?", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "576", + "max-magic": "1267", + "max-necromancy": "0" + }] + }, + { + "name": "Seething Pyrefiend", + "variants": [{ + "image": "", + "level": "119", + "defence": "75", + "slayer-level": "30", + "experience": 800, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 264, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "16000", + "max-ranged": "576", + "max-magic": "1411", + "max-necromancy": "0" + }] + }, + { + "name": "Smoulders", + "variants": [{ + "image": "", + "level": "129", + "defence": "90", + "slayer-level": "1", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "0", + "max-magic": "176", + "max-necromancy": "0" + }] + }, + { + "name": "Smoulders, the Revenger", + "variants": [{ + "image": "", + "level": "152", + "defence": "91", + "slayer-level": "?", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "2113", + "max-magic": "2388", + "max-necromancy": "0" + }] + }, + { + "name": "Angry giant rat", + "variants": [ + { + "image": "", + "level": "45", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "A Soul's Bane", + "slayer-exp": -1, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest (1)", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 62.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 20.600000381469727, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Post-quest (2)", + "slayer-exp": 14, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Crypt rat", + "variants": [{ + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dungeon rat", + "variants": [ + { + "image": "", + "level": "11", + "defence": "8", + "slayer-level": "1", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "32", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11 (1)", + "slayer-exp": -1, + "lifepoints": "400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11 (2)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 11 (3)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18 (brown)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18 (grey)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 32.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.699999809265137, + "max-melee": "52", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 18 (brown, arrows)", + "slayer-exp": -1, + "lifepoints": "650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Giant crypt rat", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 45.29999923706055, + "max-melee": "330", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant rat", + "variants": [ + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (grey)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (brown)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (grey, arrows)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7", + "defence": "5", + "slayer-level": "1", + "experience": 72.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "100", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 7 (brown, arrows)", + "slayer-exp": -1, + "lifepoints": "1450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 9 (Stronghold of Security, 1)", + "slayer-exp": -1, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 9 (Stronghold of Security, 2)", + "slayer-exp": -1, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 9 (Stronghold of Security, 3)", + "slayer-exp": -1, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Rat", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Common", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Stronghold of Security", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "N/A", + "defence": "1", + "slayer-level": "1", + "experience": 12.399999618530273, + "susceptible": [], + "lifepoint-exp": 4, + "max-melee": "−20", + "weakness": [], + "max-spec": "?", + "name": "Ratcatchers", + "slayer-exp": -1, + "lifepoints": "10", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped rat", + "variants": [{ + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 95, + "susceptible": ["<\/a>"], + "lifepoint-exp": 31.299999237060547, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8, + "lifepoints": "1900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Slasher Demon", + "variants": [{ + "image": "", + "level": "138", + "defence": "99", + "slayer-level": "96", + "experience": 3356.300048828125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1107.5, + "max-melee": "979", + "weakness": ["<\/a>"], + "max-spec": "32000", + "name": "Default", + "slayer-exp": 5299.7998046875, + "lifepoints": "67126", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Rock slug", + "variants": [{ + "image": "", + "level": "28", + "defence": "25", + "slayer-level": "20", + "experience": 202.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 66.80000305175781, + "max-melee": "375", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 33.599998474121094, + "lifepoints": "4050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Elite rune dragon", + "variants": [ + { + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "1", + "experience": 5259.39990234375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1735.5999755859375, + "max-melee": "2992", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Armoured", + "slayer-exp": 3399, + "lifepoints": "105188", + "max-ranged": "2992", + "max-magic": "2992", + "max-necromancy": "0" + }, + { + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "1", + "experience": 5259.39990234375, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 1735.5999755859375, + "max-melee": "2992", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Unarmoured", + "slayer-exp": 3399, + "lifepoints": "105188", + "max-ranged": "2992", + "max-magic": "2992", + "max-necromancy": "0" + } + ] + }, + { + "name": "Locust lancer", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 91, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Locust ranger", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "165", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 100, + "lifepoints": "2750", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Locust rider", + "variants": [ + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "810", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (1)", + "slayer-exp": -1, + "lifepoints": "2700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Range (1)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (2)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Range (2)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (3)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 270, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 89.0999984741211, + "max-melee": "364", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Range (3)", + "slayer-exp": -1, + "lifepoints": "5400", + "max-ranged": "486", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Scabaras lancer", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 55, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Scabaras mage", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "618", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 55, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "825", + "max-necromancy": "0" + }] + }, + { + "name": "Scabaras ranger", + "variants": [{ + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 275, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 90.69999694824219, + "max-melee": "165", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 109.5, + "lifepoints": "5500", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Scarab akh", + "variants": [{ + "image": "", + "level": "122", + "defence": "80", + "slayer-level": "109", + "experience": 1100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 363, + "max-melee": "921", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 715, + "lifepoints": "22000", + "max-ranged": "921", + "max-magic": "921", + "max-necromancy": "0" + }] + }, + { + "name": "Scarab mage", + "variants": [ + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "0", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "607", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Sophanem Dungeon", + "slayer-exp": 55, + "lifepoints": "2700", + "max-ranged": "0", + "max-magic": "810", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Contact!", + "slayer-exp": 55, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "1215", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dominion Tower", + "slayer-exp": 55, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "1215", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "?", + "experience": 135, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 44.5, + "max-melee": "900", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Rumble Mode", + "slayer-exp": 55, + "lifepoints": "5400", + "max-ranged": "0", + "max-magic": "1215", + "max-necromancy": "0" + } + ] + }, + { + "name": "Small scarab", + "variants": [ + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 75, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 24.700000762939453, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Uzer Mastaba", + "slayer-exp": 17, + "lifepoints": "1500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zombie (1)", + "slayer-exp": 17, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zombie (2)", + "slayer-exp": 17, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Zombie (3)", + "slayer-exp": 17, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "50", + "defence": "36", + "slayer-level": "1", + "experience": 90, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 29.700000762939453, + "max-melee": "108", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Do No Evil", + "slayer-exp": -1, + "lifepoints": "1800", + "max-ranged": "144", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Grave scorpion", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7.199999809265137, + "lifepoints": "1000", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "King Scorpion", + "variants": [{ + "image": "", + "level": "22", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 48, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pit Scorpion", + "variants": [{ + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 162.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 53.599998474121094, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 26.799999237060547, + "lifepoints": "3250", + "max-ranged": "800", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Poison Scorpion", + "variants": [{ + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 282.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 93.19999694824219, + "max-melee": "700", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 21.600000381469727, + "lifepoints": "5650", + "max-ranged": "700", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Scorpion", + "variants": [ + { + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 14", + "slayer-exp": 25, + "lifepoints": "2000", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "26", + "defence": "19", + "slayer-level": "1", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 26 (Stronghold of Security, 1)", + "slayer-exp": -1, + "lifepoints": "3150", + "max-ranged": "475", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "26", + "defence": "19", + "slayer-level": "1", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 26 (Stronghold of Security, 2)", + "slayer-exp": -1, + "lifepoints": "3150", + "max-ranged": "475", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Scorpion (Ape Atoll)", + "variants": [{ + "image": "", + "level": "14", + "defence": "10", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9.199999809265137, + "lifepoints": "1000", + "max-ranged": "200", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea Snake Hatchling", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "40", + "experience": 175, + "susceptible": ["<\/a>"], + "lifepoint-exp": 57.70000076293945, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 50, + "lifepoints": "3500", + "max-ranged": "225", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Sea Snake Young", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "40", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 85, + "lifepoints": "4500", + "max-ranged": "225", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Blissful shadow", + "variants": [{ + "image": "", + "level": "112", + "defence": "80", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 564.4000244140625, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Manifest shadow", + "variants": [{ + "image": "", + "level": "126", + "defence": "90", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 929.4000244140625, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Shadow (Temple of Light)", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1.600000023841858, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 103.5999984741211, + "lifepoints": "100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Truthful shadow", + "variants": [{ + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1008", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 343.6000061035156, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeletal Wyvern", + "variants": [ + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "1", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "2", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "3", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + }, + { + "image": "", + "level": "109", + "defence": "78", + "slayer-level": "72", + "experience": 625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1100", + "weakness": ["<\/a>"], + "max-spec": "2000", + "name": "4", + "slayer-exp": 510.79998779296875, + "lifepoints": "12500", + "max-ranged": "1100", + "max-magic": "1100", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bossy McBossFace's First mate", + "variants": [{ + "image": "", + "level": "122", + "defence": "78", + "slayer-level": "1", + "experience": 1100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 363, + "max-melee": "1886.4", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "22000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant skeleton (Shadow Dungeon)", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": ["<\/a>"], + "lifepoint-exp": 49.5, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant skeleton (Tarn's Lair)", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Huge skeleton", + "variants": [ + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 198, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 608, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 608, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeletal miner", + "variants": [{ + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 21.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeletal shielder", + "variants": [] + }, + { + "name": "Skeleton", + "variants": [ + { + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 105, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 34.599998474121094, + "max-melee": "44", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 15", + "slayer-exp": 8.800000190734863, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "16", + "defence": "12", + "slayer-level": "1", + "experience": 30, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 9.899999618530273, + "max-melee": "48", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 16", + "slayer-exp": 9.199999809265137, + "lifepoints": "600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 57.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 18.899999618530273, + "max-melee": "92", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 32", + "slayer-exp": 13, + "lifepoints": "1150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 265, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 87.4000015258789, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 46", + "slayer-exp": 39.400001525878906, + "lifepoints": "5300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "51", + "defence": "37", + "slayer-level": "1", + "experience": 297.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 98.0999984741211, + "max-melee": "740", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 51", + "slayer-exp": 47.20000076293945, + "lifepoints": "5950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 58", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Ape Atoll)", + "variants": [{ + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 250, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 82.5, + "max-melee": "224", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 102.4000015258789, + "lifepoints": "5000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton (Barrows)", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "372", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "86", + "slayer-exp": 77.19999694824219, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 157.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.900001525878906, + "max-melee": "378", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "88", + "slayer-exp": 81, + "lifepoints": "3150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Dark Warriors' Fortress)", + "variants": [ + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 57.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 18.899999618530273, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": -1, + "lifepoints": "1150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "32", + "defence": "23", + "slayer-level": "1", + "experience": 57.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 18.899999618530273, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": -1, + "lifepoints": "1150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Heart of Gielinor)", + "variants": [{ + "image": "", + "level": "108", + "defence": "75", + "slayer-level": "1", + "experience": 400, + "susceptible": ["<\/a>"], + "lifepoint-exp": 132, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 334.20001220703125, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton (Lumbridge Catacombs)", + "variants": [{ + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 105, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 34.599998474121094, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8.800000190734863, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton (Tarn's Lair)", + "variants": [ + { + "image": "", + "level": "79", + "defence": "57", + "slayer-level": "1", + "experience": 142.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 60.599998474121094, + "lifepoints": "2850", + "max-ranged": "0", + "max-magic": "228", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "8", + "slayer-exp": 47.400001525878906, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Temple Trekking)", + "variants": [ + { + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 8.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2.799999952316284, + "max-melee": "7", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "18", + "slayer-exp": 2.4000000953674316, + "lifepoints": "170", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "28", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Helmet", + "slayer-exp": 18.600000381469727, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 35, + "susceptible": ["<\/a>"], + "lifepoint-exp": 11.5, + "max-melee": "28", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "No helmet", + "slayer-exp": 18.600000381469727, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Ullek)", + "variants": [ + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Warhammer", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Axe", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Round shield", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Square shield", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 41.20000076293945, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Mace", + "slayer-exp": -1, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton (Uncharted Isles)", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 550, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 181.5, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (With Weapons)", + "slayer-exp": 98.5999984741211, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 550, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 181.5, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee (Without Weapons)", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 550, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 181.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "1515", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton Archer", + "variants": [ + { + "image": "", + "level": "100", + "defence": "67", + "slayer-level": "0", + "experience": 729, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240.5, + "max-melee": "369", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "10000", + "max-ranged": "369", + "max-magic": "369", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "?", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton Mage", + "variants": [ + { + "image": "", + "level": "19", + "defence": "14", + "slayer-level": "1", + "experience": 35, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 11.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 19", + "slayer-exp": 9.399999618530273, + "lifepoints": "700", + "max-ranged": "0", + "max-magic": "56", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 49", + "slayer-exp": 21.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "140", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton archer (Ancient Awakening)", + "variants": [ + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton brute", + "variants": [{ + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 157.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.900001525878906, + "max-melee": "252", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "3150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton fremennik", + "variants": [ + { + "image": "", + "level": "23", + "defence": "17", + "slayer-level": "1", + "experience": 42.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 14, + "max-melee": "102", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 23", + "slayer-exp": 10.199999809265137, + "lifepoints": "850", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "28", + "defence": "22", + "slayer-level": "1", + "experience": 55, + "susceptible": ["<\/a>"], + "lifepoint-exp": 18.100000381469727, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 28", + "slayer-exp": 11.399999618530273, + "lifepoints": "1100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "30", + "defence": "22", + "slayer-level": "1", + "experience": 55, + "susceptible": ["<\/a>"], + "lifepoint-exp": 18.100000381469727, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 30", + "slayer-exp": 12.600000381469727, + "lifepoints": "1100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton heavy", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 160, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 52.79999923706055, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 85.19999694824219, + "lifepoints": "3200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton hero", + "variants": [{ + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 43.70000076293945, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton knight", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 259.79998779296875, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton ranger (Ancient Awakening)", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 670.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 221.10000610351562, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "13405", + "max-ranged": "1875", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 957.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 315.8999938964844, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "19150", + "max-ranged": "1875", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1436.25, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 473.8999938964844, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "28725", + "max-ranged": "1875", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Skeleton thug", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 73.5999984741211, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton warlord", + "variants": [{ + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 162.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 53.599998474121094, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 89.4000015258789, + "lifepoints": "3250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton warrior (Ancient Awakening)", + "variants": [{ + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "?", + "experience": 603.9000244140625, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 199.1999969482422, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Skeleton warrior (Rasial)", + "variants": [] + }, + { + "name": "Summoned skeleton", + "variants": [ + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "0", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "1415", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 1165, + "lifepoints": "9000", + "max-ranged": "1415", + "max-magic": "1415", + "max-necromancy": "0" + }, + { + "image": "", + "level": "114", + "defence": "70", + "slayer-level": "0", + "experience": 225, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 74.19999694824219, + "max-melee": "1415", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 1165, + "lifepoints": "4500", + "max-ranged": "1415", + "max-magic": "1415", + "max-necromancy": "0" + } + ] + }, + { + "name": "Summoned skeleton archer", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "2000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "?", + "slayer-level": "0", + "experience": 50, + "susceptible": [], + "lifepoint-exp": 16.5, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Training dummy", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Permanent", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to air, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to air, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to air, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to water, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to water, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to water, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to earth, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to earth, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to earth, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to fire, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to fire, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to fire, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to nothing, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to nothing, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Melee (weak to nothing, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to stab, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to stab, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to stab, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to slash, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to slash, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to slash, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to crush, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to crush, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to crush, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to nothing, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to nothing, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ranged (weak to nothing, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to arrows, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to arrows, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to arrows, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to bolts, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to bolts, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to bolts, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to thrown, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to thrown, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to thrown, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to nothing, weak)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to nothing, medium)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Magic (weak to nothing, strong)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dragon (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dragon (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dragon (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Undead (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Undead (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Undead (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Demon (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Demon (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Demon (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abyssal demon (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abyssal demon (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abyssal demon (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Wallasalki (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Wallasalki (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Wallasalki (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Basilisk (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Basilisk (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Basilisk (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Revenant (magic)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "10", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Revenant (ranged)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "10", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "5", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Revenant (melee)", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Undead one", + "variants": [ + { + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 72.5999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Skeleton (level 44)", + "slayer-exp": 18.799999237060547, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 75.9000015258789, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Skeleton (level 46)", + "slayer-exp": 19.600000381469727, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "44", + "defence": "32", + "slayer-level": "1", + "experience": 72.5999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 23.899999618530273, + "max-melee": "128", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Zombie (level 44)", + "slayer-exp": 18.799999237060547, + "lifepoints": "1600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 75.9000015258789, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Zombie (level 46)", + "slayer-exp": 19.600000381469727, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped skeleton", + "variants": [ + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "1684.8", + "max-necromancy": "0" + }, + { + "image": "", + "level": "113", + "defence": "72", + "slayer-level": "0", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1684.8", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "15000", + "max-ranged": "0", + "max-magic": "1684.8", + "max-necromancy": "0" + } + ] + }, + { + "name": "Feline akh", + "variants": [{ + "image": "", + "level": "109", + "defence": "76", + "slayer-level": "107", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "1166", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 536.2000122070312, + "lifepoints": "15000", + "max-ranged": "1166", + "max-magic": "1166", + "max-necromancy": "0" + }] + }, + { + "name": "Gorilla akh", + "variants": [{ + "image": "", + "level": "111", + "defence": "70", + "slayer-level": "113", + "experience": 1000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 330, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "1300", + "name": "Default", + "slayer-exp": 705.4000244140625, + "lifepoints": "20000", + "max-ranged": "1296", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Imperial mage akh", + "variants": [{ + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "117", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1780.5999755859375, + "lifepoints": "25000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Imperial ranger akh", + "variants": [{ + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "117", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1780.5999755859375, + "lifepoints": "25000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Imperial warrior akh", + "variants": [{ + "image": "", + "level": "130", + "defence": "92", + "slayer-level": "117", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Default", + "slayer-exp": 1780.5999755859375, + "lifepoints": "25000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }] + }, + { + "name": "Oreb, the Magister", + "variants": [{ + "image": "", + "level": "899", + "defence": "90", + "slayer-level": "0", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1425", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "200000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "0" + }] + }, + { + "name": "Salawa akh", + "variants": [{ + "image": "", + "level": "106", + "defence": "73", + "slayer-level": "105", + "experience": 625, + "susceptible": ["<\/a>"], + "lifepoint-exp": 206.1999969482422, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 508.3999938964844, + "lifepoints": "12500", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }] + }, + { + "name": "The Magister", + "variants": [{ + "image": "", + "level": "899", + "defence": "90", + "slayer-level": "115", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1425", + "weakness": ["<\/a>"], + "max-spec": "4000", + "name": "Default", + "slayer-exp": 8000, + "lifepoints": "200000", + "max-ranged": "1425", + "max-magic": "1425", + "max-necromancy": "0" + }] + }, + { + "name": "Soulgazer (elite)", + "variants": [{ + "image": "", + "level": "135", + "defence": "90", + "slayer-level": "99", + "experience": 6000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1980, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 5849.2001953125, + "lifepoints": "120000", + "max-ranged": "0", + "max-magic": "1738", + "max-necromancy": "0" + }] + }, + { + "name": "Corpse spider", + "variants": [{ + "image": "", + "level": "4", + "defence": "3", + "slayer-level": "1", + "experience": 30, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 9.899999618530273, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.599999904632568, + "lifepoints": "600", + "max-ranged": "60", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Crypt spider", + "variants": [{ + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 112.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 37.099998474121094, + "max-melee": "270", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 34.20000076293945, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Deadly red spider", + "variants": [{ + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 307.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 101.4000015258789, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 103.5999984741211, + "lifepoints": "6150", + "max-ranged": "1360", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant crypt spider", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": ["<\/a>"], + "lifepoint-exp": 49.5, + "max-melee": "360", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "3000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Giant spider", + "variants": [ + { + "image": "", + "level": "2", + "defence": "2", + "slayer-level": "1", + "experience": 27.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 9, + "max-melee": "40", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 2", + "slayer-exp": 6.400000095367432, + "lifepoints": "550", + "max-ranged": "40", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "33", + "defence": "24", + "slayer-level": "1", + "experience": 225, + "susceptible": ["<\/a>"], + "lifepoint-exp": 74.19999694824219, + "max-melee": "480", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 33", + "slayer-exp": 13.399999618530273, + "lifepoints": "3900", + "max-ranged": "480", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "19", + "slayer-level": "1", + "experience": 157.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 51.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29", + "slayer-exp": 31.200000762939453, + "lifepoints": "3150", + "max-ranged": "480", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice spider", + "variants": [{ + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 120, + "susceptible": ["<\/a>"], + "lifepoint-exp": 39.599998474121094, + "max-melee": "440", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 17.200000762939453, + "lifepoints": "2400", + "max-ranged": "600", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Jungle spider", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 272.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 89.9000015258789, + "max-melee": "1240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Common", + "slayer-exp": 77, + "lifepoints": "5450", + "max-ranged": "1240", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.20000076293945, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.199999809265137, + "max-melee": "56", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Musa Point", + "slayer-exp": 9, + "lifepoints": "750", + "max-ranged": "56", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 312.29998779296875, + "susceptible": ["<\/a>"], + "lifepoint-exp": 103, + "max-melee": "189", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ape Atoll", + "slayer-exp": -1, + "lifepoints": "3150", + "max-ranged": "252", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "30", + "slayer-level": "1", + "experience": 66.9000015258789, + "susceptible": ["<\/a>"], + "lifepoint-exp": 22, + "max-melee": "90", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Jade Vine (level 42)", + "slayer-exp": -1, + "lifepoints": "1500", + "max-ranged": "120", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 83.0999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.399999618530273, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Jade Vine (level 49)", + "slayer-exp": -1, + "lifepoints": "1750", + "max-ranged": "140", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 272.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 89.9000015258789, + "max-melee": "1240", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Tai Bwo Wannai Cleanup", + "slayer-exp": -1, + "lifepoints": "5450", + "max-ranged": "1240", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Lava spider", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": 491, + "lifepoints": "15000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 247.5, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": 245.5, + "lifepoints": "15000", + "max-ranged": "672", + "max-magic": "672", + "max-necromancy": "0" + } + ] + }, + { + "name": "Poison spider", + "variants": [ + { + "image": "", + "level": "53", + "defence": "45", + "slayer-level": "1", + "experience": 185, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common", + "slayer-exp": 34.20000076293945, + "lifepoints": "3700", + "max-ranged": "600", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 27.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 9, + "max-melee": "33", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Observatory", + "slayer-exp": 8.800000190734863, + "lifepoints": "550", + "max-ranged": "44", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Shadow spider", + "variants": [{ + "image": "", + "level": "46", + "defence": "33", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "132", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.600000381469727, + "lifepoints": "1650", + "max-ranged": "132", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Spider", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "4", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Common", + "slayer-exp": 6.400000095367432, + "lifepoints": "50", + "max-ranged": "4", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "3", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Underground Pass", + "slayer-exp": 6.400000095367432, + "lifepoints": "50", + "max-ranged": "4", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 2.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0.800000011920929, + "max-melee": "3", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ape Atoll", + "slayer-exp": 17.600000381469727, + "lifepoints": "50", + "max-ranged": "4", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "15", + "defence": "11", + "slayer-level": "1", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Stronghold of Security", + "slayer-exp": 6.400000095367432, + "lifepoints": "1050", + "max-ranged": "220", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Spyndra", + "variants": [ + { + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "0" + }, + { + "image": "", + "level": "107", + "defence": "70", + "slayer-level": "1", + "experience": 9000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2970, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": 3760.89990234375, + "lifepoints": "180000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "0" + } + ] + }, + { + "name": "Veil-ripper Ozharakha", + "variants": [{ + "image": "", + "level": "135", + "defence": "90", + "slayer-level": "99", + "experience": 7500, + "susceptible": [], + "lifepoint-exp": 2475, + "max-melee": "1104", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 25000, + "lifepoints": "150000", + "max-ranged": "1104", + "max-magic": "1104", + "max-necromancy": "0" + }] + }, + { + "name": "Suqah", + "variants": [ + { + "image": "", + "level": "73", + "defence": "50", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [], + "lifepoint-exp": 43.70000076293945, + "max-melee": "380", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 73 (Dual wielding swords)", + "slayer-exp": 47.400001525878906, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "380", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "60", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [], + "lifepoint-exp": 43.70000076293945, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 74", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "60", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [], + "lifepoint-exp": 43.70000076293945, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 74 (Magic)", + "slayer-exp": 49.79999923706055, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "349", + "max-necromancy": "0" + }, + { + "image": "", + "level": "79", + "defence": "60", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "349", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 79", + "slayer-exp": 57.599998474121094, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "349", + "max-necromancy": "0" + } + ] + }, + { + "name": "Terror dog", + "variants": [ + { + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "40", + "experience": 235, + "susceptible": ["<\/a>"], + "lifepoint-exp": 77.5, + "max-melee": "188", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 65", + "slayer-exp": 75.4000015258789, + "lifepoints": "4700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "40", + "experience": 220, + "susceptible": ["<\/a>"], + "lifepoint-exp": 72.5999984741211, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 61", + "slayer-exp": 65.19999694824219, + "lifepoints": "4400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice troll", + "variants": [ + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "38", + "experience": 525, + "susceptible": ["<\/a>"], + "lifepoint-exp": 173.1999969482422, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Troll Romance", + "slayer-exp": 70, + "lifepoints": "10500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "38", + "experience": 525, + "susceptible": ["<\/a>"], + "lifepoint-exp": 173.1999969482422, + "max-melee": "1200", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Desert Treasure", + "slayer-exp": 70, + "lifepoints": "10500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ice troll female", + "variants": [{ + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.5, + "lifepoints": "8200", + "max-ranged": "980", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice troll grunt", + "variants": [{ + "image": "", + "level": "68", + "defence": "50", + "slayer-level": "1", + "experience": 420, + "susceptible": ["<\/a>"], + "lifepoint-exp": 138.60000610351562, + "max-melee": "1000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice troll male", + "variants": [{ + "image": "", + "level": "68", + "defence": "49", + "slayer-level": "1", + "experience": 410, + "susceptible": ["<\/a>"], + "lifepoint-exp": 135.3000030517578, + "max-melee": "980", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 41.5, + "lifepoints": "8200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Ice troll runt", + "variants": [{ + "image": "", + "level": "53", + "defence": "38", + "slayer-level": "1", + "experience": 307.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 101.4000015258789, + "max-melee": "760", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 24.799999237060547, + "lifepoints": "6150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Kraka", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 657.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 216.89999389648438, + "max-melee": "1800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "13150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mountain troll", + "variants": [{ + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 460, + "susceptible": ["<\/a>"], + "lifepoint-exp": 151.8000030517578, + "max-melee": "1620", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 52.20000076293945, + "lifepoints": "9200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Mountain troll (well)", + "variants": [{ + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 7, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Pee Hat", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 657.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 216.89999389648438, + "max-melee": "1800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 70, + "lifepoints": "13150", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "River troll", + "variants": [{ + "image": "", + "level": "N/A", + "defence": "130", + "slayer-level": "1", + "experience": 172.1999969482422, + "susceptible": [], + "lifepoint-exp": 56.79999923706055, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 89.4000015258789, + "lifepoints": "1700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Rock (monster)", + "variants": [{ + "image": "", + "level": "88", + "defence": "63", + "slayer-level": "1", + "experience": 1395, + "susceptible": ["<\/a>"], + "lifepoint-exp": 460.29998779296875, + "max-melee": "1890", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "27900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Stick", + "variants": [{ + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 670, + "susceptible": ["<\/a>"], + "lifepoint-exp": 221.10000610351562, + "max-melee": "1830", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 73.5999984741211, + "lifepoints": "13400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Stove", + "variants": [{ + "image": "", + "level": "4", + "defence": "3", + "slayer-level": "1", + "experience": 50, + "susceptible": ["<\/a>"], + "lifepoint-exp": 16.5, + "max-melee": "129", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Thrower Troll", + "variants": [ + { + "image": "", + "level": "67", + "defence": "55", + "slayer-level": "1", + "experience": 472.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 155.89999389648438, + "max-melee": "1435", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Death Plateau", + "slayer-exp": 54.79999923706055, + "lifepoints": "9450", + "max-ranged": "1225", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "67", + "defence": "55", + "slayer-level": "1", + "experience": 472.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 155.89999389648438, + "max-melee": "1435", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Trollheim", + "slayer-exp": 54.79999923706055, + "lifepoints": "9450", + "max-ranged": "1225", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Troll brute", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12.800000190734863, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll brute (Davendale)", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "72", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll chucker", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12.800000190734863, + "lifepoints": "250", + "max-ranged": "20", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll chucker (Davendale)", + "variants": [{ + "image": "", + "level": "1", + "defence": "?", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "0", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "72", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Troll general", + "variants": [ + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sword", + "slayer-exp": 89.4000015258789, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Hammer", + "slayer-exp": 89.4000015258789, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "1", + "experience": 727.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 240, + "max-melee": "1950", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Club", + "slayer-exp": 89.4000015258789, + "lifepoints": "14550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Troll lout", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "72", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Troll shaman", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 12.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4.099999904632568, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 6.400000095367432, + "lifepoints": "250", + "max-ranged": "0", + "max-magic": "20", + "max-necromancy": "0" + }] + }, + { + "name": "Troll shaman (Davendale)", + "variants": [{ + "image": "", + "level": "1", + "defence": "?", + "slayer-level": "?", + "experience": 20, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6.599999904632568, + "max-melee": "0", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "72", + "max-necromancy": "?" + }] + }, + { + "name": "Troll spectator", + "variants": [{ + "image": "", + "level": "65", + "defence": "47", + "slayer-level": "1", + "experience": 390, + "susceptible": ["<\/a>"], + "lifepoint-exp": 128.6999969482422, + "max-melee": "1175", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 37.599998474121094, + "lifepoints": "7800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead troll", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 77", + "slayer-exp": -1, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (1)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (2)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (3)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (4)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "81", + "defence": "58", + "slayer-level": "1", + "experience": 145, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 47.79999923706055, + "max-melee": "232", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 81 (5)", + "slayer-exp": -1, + "lifepoints": "2900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 86 (1)", + "slayer-exp": -1, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 86 (2)", + "slayer-exp": -1, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 86 (3)", + "slayer-exp": -1, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (1)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (2)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (3)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (4)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (5)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (6)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "95", + "defence": "68", + "slayer-level": "1", + "experience": 170, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 56.099998474121094, + "max-melee": "272", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 95 (7)", + "slayer-exp": -1, + "lifepoints": "3400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Turoth", + "variants": [ + { + "image": "", + "level": "60", + "defence": "44", + "slayer-level": "55", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "60 - Small", + "slayer-exp": 52, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "60", + "defence": "44", + "slayer-level": "55", + "experience": 180, + "susceptible": ["<\/a>"], + "lifepoint-exp": 59.400001525878906, + "max-melee": "840", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "60 - Large", + "slayer-exp": 52, + "lifepoints": "3600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "50", + "slayer-level": "55", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "960", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "68 - Male", + "slayer-exp": 70.80000305175781, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "68", + "defence": "50", + "slayer-level": "55", + "experience": 210, + "susceptible": ["<\/a>"], + "lifepoint-exp": 69.30000305175781, + "max-melee": "960", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "68 - Female", + "slayer-exp": 70.80000305175781, + "lifepoints": "4200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "TzHaar-Hur", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "310", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 86", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "1", + "experience": 175, + "susceptible": [], + "lifepoint-exp": 57.70000076293945, + "max-melee": "210", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 98", + "slayer-exp": 0, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "280", + "max-necromancy": "0" + } + ] + }, + { + "name": "TzHaar-Ket", + "variants": [{ + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "TzHaar-Mej", + "variants": [{ + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "310", + "max-necromancy": "0" + }] + }, + { + "name": "TzHaar-Xil", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "0", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "248", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "0", + "experience": 155, + "susceptible": [], + "lifepoint-exp": 51.099998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged", + "slayer-exp": 77.5, + "lifepoints": "3100", + "max-ranged": "248", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Animated spade", + "variants": [{ + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Armoured zombie", + "variants": [ + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "1", + "experience": 310, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 102.30000305175781, + "max-melee": "297", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Melee", + "slayer-exp": 154.39999389648438, + "lifepoints": "6200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "91", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ritual of the Mahjarrat", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "The World Wakes", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "46", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "One of a Kind", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "84", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Dishonour among Thieves", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "42", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Dimension of Disaster", + "slayer-exp": 154.39999389648438, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 37.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 12.300000190734863, + "max-melee": "144", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "New Foundations", + "slayer-exp": 9.600000381469727, + "lifepoints": "750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bloated monstrosity", + "variants": [ + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "?", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Corpse archer", + "variants": [{ + "image": "", + "level": "18", + "defence": "13", + "slayer-level": "1", + "experience": 117.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 38.70000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2350", + "max-ranged": "260", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Corpse carrier", + "variants": [ + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (trio)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (duo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "70", + "slayer-level": "0", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "1512", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode (solo)", + "slayer-exp": -1, + "lifepoints": "90000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Corpse mage", + "variants": [{ + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 43.70000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 9, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "300", + "max-necromancy": "0" + }] + }, + { + "name": "Crawling corpse torso", + "variants": [{ + "image": "", + "level": "9", + "defence": "7", + "slayer-level": "1", + "experience": 40, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 13.199999809265137, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 16.600000381469727, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "140", + "max-necromancy": "0" + }] + }, + { + "name": "Dragith Nurn", + "variants": [{ + "image": "", + "level": "26", + "defence": "19", + "slayer-level": "1", + "experience": 395, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 130.3000030517578, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 11, + "lifepoints": "7900", + "max-ranged": "280", + "max-magic": "380", + "max-necromancy": "0" + }] + }, + { + "name": "General malpractitioner", + "variants": [{ + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 150, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 49.5, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "3000", + "max-ranged": "240", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Graveside Phantom", + "variants": [{ + "image": "", + "level": "104", + "defence": "70", + "slayer-level": "1", + "experience": 100, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 33, + "max-melee": "768", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Magic axe", + "variants": [{ + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 132.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 43.70000076293945, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "1", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Monkey Zombie", + "variants": [ + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "72", + "slayer-exp": 47.400001525878906, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "75", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "75", + "slayer-exp": 52.20000076293945, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.29999923706055, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "77", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mummy (Jaldraocht Pyramid)", + "variants": [ + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4 (on fire)", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ashes", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "55", + "slayer-level": "1", + "experience": 137, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 45.20000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Jaldraocht sarcophagus", + "slayer-exp": 54.79999923706055, + "lifepoints": "2750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Mummy (Ullek)", + "variants": [ + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4 (on fire)", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "74", + "defence": "53", + "slayer-level": "1", + "experience": 192, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 63.29999923706055, + "max-melee": "212", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ashes", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Phantom sorcerer", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 259.79998779296875, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "1875", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (standard Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "1875", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (hard Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "1875", + "max-necromancy": "0" + } + ] + }, + { + "name": "Phantom wizard", + "variants": [ + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "0", + "max-magic": "1500", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "1500", + "max-necromancy": "0" + } + ] + }, + { + "name": "Possessed pickaxe", + "variants": [ + { + "image": "", + "level": "49", + "defence": "?", + "slayer-level": "1", + "experience": 87.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 28.799999237060547, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Abandoned Mine", + "slayer-exp": -1, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "77", + "defence": "?", + "slayer-level": "1", + "experience": 175, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 57.70000076293945, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Lair of Tarn Razorlor", + "slayer-exp": -1, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "49", + "defence": "?", + "slayer-level": "1", + "experience": -1, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": -1, + "max-melee": "210", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Dominion Tower", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Possessed pickaxe (Lava Flow Mine)", + "variants": [{ + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 20, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 6.599999904632568, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Putrid zombie (Rasial)", + "variants": [] + }, + { + "name": "Soulless armoured zombie", + "variants": [{ + "image": "", + "level": "N/A", + "defence": "30", + "slayer-level": "1", + "experience": 0, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 0, + "max-melee": "288", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "10000000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Soulless unarmoured zombie", + "variants": [{ + "image": "", + "level": "N/A", + "defence": "?", + "slayer-level": "?", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Taraket the Necromancer", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "1", + "experience": 10000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3300, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "1", + "experience": 10000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 3300, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + } + ] + }, + { + "name": "Undead giant (Battle of Forinthry)", + "variants": [ + { + "image": "", + "level": "300", + "defence": "90", + "slayer-level": "?", + "experience": 3063.75, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1011, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "61275", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "300", + "defence": "90", + "slayer-level": "?", + "experience": 6127.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2022, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "122550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Unstable zombie", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 259.79998779296875, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie", + "variants": [ + { + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 30.899999618530273, + "susceptible": ["<\/a>"], + "lifepoint-exp": 10.100000381469727, + "max-melee": "36", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 12", + "slayer-exp": 8, + "lifepoints": "450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "22", + "defence": "16", + "slayer-level": "1", + "experience": 38.099998474121094, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.5, + "max-melee": "64", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 22", + "slayer-exp": 8, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "22", + "defence": "16", + "slayer-level": "1", + "experience": 38.099998474121094, + "susceptible": ["<\/a>"], + "lifepoint-exp": 12.5, + "max-melee": "64", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 22 (Graveyard of Shadows)", + "slayer-exp": 8, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "1", + "experience": 46.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 15.300000190734863, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29", + "slayer-exp": 9.800000190734863, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "1", + "experience": 46.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 15.300000190734863, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29 (Entrana)", + "slayer-exp": 8, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "1", + "experience": 46.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 15.300000190734863, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 29 (Graveyard of Shadows)", + "slayer-exp": 12, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (New Varrock)", + "variants": [{ + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 1.2000000476837158, + "susceptible": [], + "lifepoint-exp": 0.30000001192092896, + "max-melee": "10", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "25", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Zombie cow (New Varrock)", + "variants": [ + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "20", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Boss", + "slayer-exp": -1, + "lifepoints": "50", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1", + "defence": "1", + "slayer-level": "1", + "experience": 10, + "susceptible": [], + "lifepoint-exp": 3.299999952316284, + "max-melee": "28", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Regular", + "slayer-exp": -1, + "lifepoints": "200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie knight", + "variants": [ + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 787.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 259.79998779296875, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ancient Awakening", + "slayer-exp": 0, + "lifepoints": "15750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1125, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 371.20001220703125, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (standard)", + "slayer-exp": 0, + "lifepoints": "22500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "97", + "defence": "65", + "slayer-level": "1", + "experience": 1687.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 556.7999877929688, + "max-melee": "1875", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ungael combat activity (hard)", + "slayer-exp": 0, + "lifepoints": "33750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie pirate", + "variants": [ + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "1", + "experience": 83.0999984741211, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.399999618530273, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Level 49", + "slayer-exp": 21.600000381469727, + "lifepoints": "1750", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "50", + "defence": "36", + "slayer-level": "1", + "experience": 86.69999694824219, + "susceptible": ["<\/a>"], + "lifepoint-exp": 28.600000381469727, + "max-melee": "144", + "weakness": [ + "<\/a>", + "<\/a>" + ], + "max-spec": "0", + "name": "Level 50", + "slayer-exp": 11.199999809265137, + "lifepoints": "1800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "35", + "defence": "25", + "slayer-level": "1", + "experience": 54, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.799999237060547, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Pieces of Hate", + "slayer-exp": 0, + "lifepoints": "1250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie swab", + "variants": [{ + "image": "", + "level": "47", + "defence": "34", + "slayer-level": "1", + "experience": 79.80000305175781, + "susceptible": [], + "lifepoint-exp": 26.299999237060547, + "max-melee": "136", + "weakness": [ + "<\/a>", + "<\/a>" + ], + "max-spec": "0", + "name": "Default", + "slayer-exp": 22, + "lifepoints": "1700", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Zombie warrior", + "variants": [ + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 535.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 176.6999969482422, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ancient Awakening)", + "slayer-exp": 0, + "lifepoints": "10710", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "76", + "defence": "50", + "slayer-level": "1", + "experience": 765, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 252.39999389648438, + "max-melee": "1500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2 (Ungael combat activity)", + "slayer-exp": 0, + "lifepoints": "15300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Angry vampyre", + "variants": [{ + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": ["<\/a>"], + "lifepoint-exp": 34.599998474121094, + "max-melee": "168", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 29.600000381469727, + "lifepoints": "2100", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Feral vampyre", + "variants": [ + { + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "1", + "experience": 110, + "susceptible": ["<\/a>"], + "lifepoint-exp": 36.29999923706055, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Standard", + "slayer-exp": 32.599998474121094, + "lifepoints": "2200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "61", + "defence": "44", + "slayer-level": "1", + "experience": 110, + "susceptible": ["<\/a>"], + "lifepoint-exp": 36.29999923706055, + "max-melee": "176", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Spider", + "slayer-exp": 32.599998474121094, + "lifepoints": "2200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Vampyre", + "variants": [{ + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 170.39999389648438, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Vampyre Juvenile", + "variants": [ + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "1", + "experience": 100, + "susceptible": [], + "lifepoint-exp": 33, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Burgh de Rott", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "56", + "defence": "40", + "slayer-level": "?", + "experience": 100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 33, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Meiyerditch", + "slayer-exp": 28, + "lifepoints": "2000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Vampyre Juvinate", + "variants": [ + { + "image": "", + "level": "58", + "defence": "42", + "slayer-level": "1", + "experience": 105, + "susceptible": [], + "lifepoint-exp": 34.599998474121094, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Burgh de Rott (Level 58)", + "slayer-exp": 210, + "lifepoints": "2100", + "max-ranged": "168", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "60", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [], + "lifepoint-exp": 160.8000030517578, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Burgh de Rott (Level 63)", + "slayer-exp": 210, + "lifepoints": "9750", + "max-ranged": "576", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "61", + "defence": "60", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [], + "lifepoint-exp": 160.8000030517578, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Meiyerditch", + "slayer-exp": 210, + "lifepoints": "9750", + "max-ranged": "576", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "84", + "defence": "60", + "slayer-level": "1", + "experience": 487.5, + "susceptible": [], + "lifepoint-exp": 160.8000030517578, + "max-melee": "576", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Darkmeyer", + "slayer-exp": 210, + "lifepoints": "9750", + "max-ranged": "576", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Devil's snare", + "variants": [{ + "image": "", + "level": "220", + "defence": "70", + "slayer-level": "90", + "experience": 2100, + "susceptible": ["<\/a>"], + "lifepoint-exp": 693, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Default", + "slayer-exp": 1760, + "lifepoints": "42000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Lampenflora", + "variants": [{ + "image": "", + "level": "216", + "defence": "70", + "slayer-level": "102", + "experience": 1250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 412.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "3600", + "name": "Default", + "slayer-exp": 1331.800048828125, + "lifepoints": "25000", + "max-ranged": "0", + "max-magic": "1296", + "max-necromancy": "0" + }] + }, + { + "name": "Liverworts", + "variants": [{ + "image": "", + "level": "228", + "defence": "70", + "slayer-level": "110", + "experience": 3000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 990, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "4104", + "name": "Default", + "slayer-exp": 3338.39990234375, + "lifepoints": "60000", + "max-ranged": "1368", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Luminous snaggler", + "variants": [{ + "image": "", + "level": "224", + "defence": "70", + "slayer-level": "95", + "experience": 2900, + "susceptible": ["<\/a>"], + "lifepoint-exp": 957, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "6900", + "name": "Default", + "slayer-exp": 1664.800048828125, + "lifepoints": "58000", + "max-ranged": "0", + "max-magic": "2300", + "max-necromancy": "0" + }] + }, + { + "name": "Vyrelady", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "3", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "4", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "5", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "6", + "slayer-exp": 340, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + } + ] + }, + { + "name": "Vyrelord", + "variants": [ + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "1", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "2", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "3", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "4", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "5", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + }, + { + "image": "", + "level": "98", + "defence": "70", + "slayer-level": "?", + "experience": 568.5, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 187.60000610351562, + "max-melee": "672", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "6", + "slayer-exp": 343.6000061035156, + "lifepoints": "11370", + "max-ranged": "0", + "max-magic": "672", + "max-necromancy": "?" + } + ] + }, + { + "name": "Vyrewatch", + "variants": [ + { + "image": "", + "level": "70", + "defence": "50", + "slayer-level": "1", + "experience": 125, + "susceptible": ["<\/a>"], + "lifepoint-exp": 41.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 70", + "slayer-exp": 43.20000076293945, + "lifepoints": "2500", + "max-ranged": "0", + "max-magic": "200", + "max-necromancy": "?" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": ["<\/a>"], + "lifepoint-exp": 42.900001525878906, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 72", + "slayer-exp": 47.400001525878906, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "54", + "slayer-level": "1", + "experience": 135, + "susceptible": ["<\/a>"], + "lifepoint-exp": 44.5, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 75", + "slayer-exp": 52.20000076293945, + "lifepoints": "2700", + "max-ranged": "0", + "max-magic": "216", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "56", + "slayer-level": "1", + "experience": 140, + "susceptible": ["<\/a>"], + "lifepoint-exp": 46.20000076293945, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 78", + "slayer-exp": 57.599998474121094, + "lifepoints": "2800", + "max-ranged": "0", + "max-magic": "224", + "max-necromancy": "?" + }, + { + "image": "", + "level": "86", + "defence": "62", + "slayer-level": "?", + "experience": 500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 165, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 86", + "slayer-exp": 238.6999969482422, + "lifepoints": "10000", + "max-ranged": "0", + "max-magic": "595", + "max-necromancy": "?" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "?", + "experience": 528, + "susceptible": ["<\/a>"], + "lifepoint-exp": 174.1999969482422, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 91", + "slayer-exp": 364.5, + "lifepoints": "10560", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "49", + "defence": "35", + "slayer-level": "?", + "experience": 175, + "susceptible": ["<\/a>"], + "lifepoint-exp": 57.70000076293945, + "max-melee": "140", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Easy Route)", + "slayer-exp": -1, + "lifepoints": "3500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "91", + "defence": "65", + "slayer-level": "?", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "260", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Medium Route)", + "slayer-exp": -1, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "97", + "defence": "60", + "slayer-level": "?", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "280", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Temple Trekking (Hard Route)", + "slayer-exp": -1, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "70", + "defence": "?", + "slayer-level": "?", + "experience": 406, + "susceptible": [], + "lifepoint-exp": 133.89999389648438, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 70 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "8120", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + }, + { + "image": "", + "level": "72", + "defence": "?", + "slayer-level": "?", + "experience": 422.5, + "susceptible": [], + "lifepoint-exp": 139.39999389648438, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 72 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "8450", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "?", + "slayer-level": "?", + "experience": 438.5, + "susceptible": [], + "lifepoint-exp": 144.6999969482422, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 75 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "8770", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "?", + "slayer-level": "?", + "experience": 455, + "susceptible": [], + "lifepoint-exp": 150.10000610351562, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Level 78 (East of Burgh de Rott)", + "slayer-exp": -1, + "lifepoints": "9100", + "max-ranged": "0", + "max-magic": "?", + "max-necromancy": "?" + } + ] + }, + { + "name": "Wall beast", + "variants": [{ + "image": "", + "level": "45", + "defence": "34", + "slayer-level": "35", + "experience": 272.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 89.9000015258789, + "max-melee": "600", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 20.600000381469727, + "lifepoints": "5450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Warped terrorbird", + "variants": [ + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "1 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "2 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "3 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "4 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "5 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "6 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "7", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "7 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "8", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "8 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "9", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "9 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + }, + { + "image": "", + "level": "82", + "defence": "59", + "slayer-level": "56", + "experience": 295, + "susceptible": [], + "lifepoint-exp": 97.30000305175781, + "max-melee": "177", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "10 (chimed)", + "slayer-exp": 133.39999389648438, + "lifepoints": "5900", + "max-ranged": "236", + "max-magic": "177", + "max-necromancy": "0" + } + ] + }, + { + "name": "Warped tortoise", + "variants": [ + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "56", + "experience": 260, + "susceptible": ["<\/a>"], + "lifepoint-exp": 85.80000305175781, + "max-melee": "156", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Immune", + "slayer-exp": 95, + "lifepoints": "5200", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "?" + }, + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "56", + "experience": 260, + "susceptible": ["<\/a>"], + "lifepoint-exp": 85.80000305175781, + "max-melee": "156", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Vulnerable", + "slayer-exp": 95, + "lifepoints": "5200", + "max-ranged": "0", + "max-magic": "208", + "max-necromancy": "?" + } + ] + }, + { + "name": "Maelstrom, Raging Waterfiend", + "variants": [{ + "image": "", + "level": "142", + "defence": "77", + "slayer-level": "?", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 10000, + "lifepoints": "180000", + "max-ranged": "2113", + "max-magic": "2388", + "max-necromancy": "0" + }] + }, + { + "name": "Torrential Waterfiend", + "variants": [{ + "image": "", + "level": "118", + "defence": "77", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "18000", + "max-ranged": "1727", + "max-magic": "1727", + "max-necromancy": "0" + }] + }, + { + "name": "Torrential Waterfiend (summoned)", + "variants": [{ + "image": "", + "level": "118", + "defence": "77", + "slayer-level": "1", + "experience": 900, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 297, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "18000", + "max-ranged": "1727", + "max-magic": "1727", + "max-necromancy": "0" + }] + }, + { + "name": "Waterfiend", + "variants": [{ + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "800", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 335, + "lifepoints": "8000", + "max-ranged": "800", + "max-magic": "800", + "max-necromancy": "?" + }] + }, + { + "name": "Waterfiend (Ghorrock)", + "variants": [ + { + "image": "", + "level": "102", + "defence": "73", + "slayer-level": "1", + "experience": 400, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 132, + "max-melee": "739", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "102", + "slayer-exp": 290.79998779296875, + "lifepoints": "8000", + "max-ranged": "739", + "max-magic": "739", + "max-necromancy": "?" + }, + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "107", + "slayer-exp": -1, + "lifepoints": "20000", + "max-ranged": "0", + "max-magic": "720", + "max-necromancy": "?" + } + ] + }, + { + "name": "Waterfiend (Temple of Aminishi)", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 700, + "susceptible": [], + "lifepoint-exp": 231, + "max-melee": "936", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "14000", + "max-ranged": "936", + "max-magic": "936", + "max-necromancy": "?" + }, + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "1", + "experience": 700, + "susceptible": [], + "lifepoint-exp": 231, + "max-melee": "936", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "14000", + "max-ranged": "936", + "max-magic": "936", + "max-necromancy": "?" + } + ] + }, + { + "name": "Waterfiend (The Zamorakian Undercity)", + "variants": [{ + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "1", + "experience": 450, + "susceptible": ["<\/a>"], + "lifepoint-exp": 148.5, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 600, + "lifepoints": "9000", + "max-ranged": "1506", + "max-magic": "1506", + "max-necromancy": "?" + }] + }, + { + "name": "Waterfiend (elite)", + "variants": [ + { + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "1", + "experience": 1600, + "susceptible": [], + "lifepoint-exp": 528, + "max-melee": "2400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Ancient Cavern", + "slayer-exp": 1181.4000244140625, + "lifepoints": "32000", + "max-ranged": "2400", + "max-magic": "2400", + "max-necromancy": "?" + }, + { + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "1", + "experience": 1600, + "susceptible": [], + "lifepoint-exp": 528, + "max-melee": "2400", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Ghorrock", + "slayer-exp": 1181.4000244140625, + "lifepoints": "32000", + "max-ranged": "2400", + "max-magic": "2400", + "max-necromancy": "?" + } + ] + }, + { + "name": "Waterfiend (summoned)", + "variants": [{ + "image": "", + "level": "111", + "defence": "77", + "slayer-level": "?", + "experience": 450, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 148.5, + "max-melee": "1414", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "9000", + "max-ranged": "1506", + "max-magic": "1506", + "max-necromancy": "?" + }] + }, + { + "name": "Werewolf", + "variants": [ + { + "image": "", + "level": "63", + "defence": "45", + "slayer-level": "1", + "experience": 112.5, + "susceptible": [], + "lifepoint-exp": 37.099998474121094, + "max-melee": "225", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Boris", + "slayer-exp": 34.5, + "lifepoints": "2250", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Imre", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Yuri", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Joseph", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Nikolai", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Eduard", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Lev", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Georgy", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Svetlana", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Irina", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Alexis", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Milla", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Galina", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Sofiya", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Ksenia", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Yadviga", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Nikita", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Vera", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Zoja", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "63", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Liliya", + "slayer-exp": 34.5, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon (male)", + "slayer-exp": 171, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "89", + "defence": "64", + "slayer-level": "1", + "experience": 320, + "susceptible": [], + "lifepoint-exp": 105.5999984741211, + "max-melee": "256", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "God Wars Dungeon (female)", + "slayer-exp": 171, + "lifepoints": "6400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Adolescent White wolf", + "variants": [{ + "image": "", + "level": "6", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "120", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 7, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Big Wolf", + "variants": [ + { + "image": "", + "level": "20", + "defence": "13", + "slayer-level": "1", + "experience": 147.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 48.599998474121094, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "White", + "slayer-exp": 18, + "lifepoints": "2950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "20", + "defence": "13", + "slayer-level": "1", + "experience": 147.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 48.599998474121094, + "max-melee": "340", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Grey", + "slayer-exp": 18, + "lifepoints": "2950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Desert wolf", + "variants": [ + { + "image": "", + "level": "12", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Brown", + "slayer-exp": 8.800000190734863, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "12", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Grey", + "slayer-exp": 8.800000190734863, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Dire Wolf", + "variants": [{ + "image": "", + "level": "43", + "defence": "29", + "slayer-level": "1", + "experience": 232.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 76.69999694824219, + "max-melee": "660", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 19.600000381469727, + "lifepoints": "4650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fenris wolf", + "variants": [{ + "image": "", + "level": "46", + "defence": "31", + "slayer-level": "1", + "experience": 247.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 81.5999984741211, + "max-melee": "700", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": 21.600000381469727, + "lifepoints": "4950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Fenris wolf (Sköll)", + "variants": [] + }, + { + "name": "Ice wolf", + "variants": [ + { + "image": "", + "level": "58", + "defence": "40", + "slayer-level": "1", + "experience": 325, + "susceptible": ["<\/a>"], + "lifepoint-exp": 107.19999694824219, + "max-melee": "880", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "58", + "slayer-exp": 45.400001525878906, + "lifepoints": "6500", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "72", + "defence": "50", + "slayer-level": "1", + "experience": 420, + "susceptible": ["<\/a>"], + "lifepoint-exp": 138.60000610351562, + "max-melee": "1350", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "72", + "slayer-exp": 207.39999389648438, + "lifepoints": "8400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Jungle Wolf", + "variants": [{ + "image": "", + "level": "78", + "defence": "54", + "slayer-level": "1", + "experience": 460, + "susceptible": ["<\/a>"], + "lifepoint-exp": 151.8000030517578, + "max-melee": "1160", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 81, + "lifepoints": "9200", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "White wolf", + "variants": [{ + "image": "", + "level": "12", + "defence": "7", + "slayer-level": "1", + "experience": 82.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 27.200000762939453, + "max-melee": "220", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 12.600000381469727, + "lifepoints": "1650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Wolf", + "variants": [ + { + "image": "", + "level": "8", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 8 (1)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "8", + "defence": "4", + "slayer-level": "1", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "160", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 8 (2)", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "6", + "slayer-level": "1", + "experience": 77.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 11 (1)", + "slayer-exp": -1, + "lifepoints": "1550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "11", + "defence": "6", + "slayer-level": "1", + "experience": 77.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 25.5, + "max-melee": "200", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 11 (2)", + "slayer-exp": -1, + "lifepoints": "1550", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Armoured zombie (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "?", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 841, + "lifepoints": "20000", + "max-ranged": "739", + "max-magic": "739", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "77", + "slayer-level": "?", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "20000", + "max-ranged": "739", + "max-magic": "739", + "max-necromancy": "0" + } + ] + }, + { + "name": "Armoured zombie (Uncharted Isles)", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Docile (Throwing Axes)", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Docile (Sword and Shield)", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 50, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 16.5, + "max-melee": "268", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Aggressive", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "268", + "max-magic": "268", + "max-necromancy": "0" + } + ] + }, + { + "name": "Bossy McBossFace", + "variants": [{ + "image": "", + "level": "123", + "defence": "72", + "slayer-level": "0", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Dried zombie", + "variants": [ + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Parched", + "slayer-exp": 41, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Unmoisturised", + "slayer-exp": 41, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "67", + "defence": "48", + "slayer-level": "1", + "experience": 120, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 39.599998474121094, + "max-melee": "192", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Dried", + "slayer-exp": 41, + "lifepoints": "2400", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Empowering zombie", + "variants": [] + }, + { + "name": "Summoned Zombie", + "variants": [{ + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 22.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 7.400000095367432, + "max-melee": "36", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 8, + "lifepoints": "450", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Summoned Zombie (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "0", + "experience": 600, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 198, + "max-melee": "368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "8000", + "max-ranged": "368", + "max-magic": "368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Summoned armoured zombie", + "variants": [ + { + "image": "", + "level": "107", + "defence": "77", + "slayer-level": "0", + "experience": 1000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 330, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "10000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": [], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": [], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Ulthven Keith", + "variants": [{ + "image": "", + "level": "117", + "defence": "72", + "slayer-level": "0", + "experience": 9000, + "susceptible": [ + "<\/a>", + "<\/a>" + ], + "lifepoint-exp": 2970, + "max-melee": "1966", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "180000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }] + }, + { + "name": "Undead Witch", + "variants": [ + { + "image": "", + "level": "170", + "defence": "75", + "slayer-level": "0", + "experience": 1500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 495, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "30000", + "max-ranged": "0", + "max-magic": "Varies", + "max-necromancy": "0" + }, + { + "image": "", + "level": "?", + "defence": "?", + "slayer-level": "0", + "experience": -1, + "susceptible": ["<\/a>"], + "lifepoint-exp": -1, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "?", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (Lair of Tarn Razorlor)", + "variants": [ + { + "image": "", + "level": "72", + "defence": "52", + "slayer-level": "1", + "experience": 130, + "susceptible": ["<\/a>"], + "lifepoint-exp": 42.900001525878906, + "max-melee": "208", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "72", + "slayer-exp": -1, + "lifepoints": "2600", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "74", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "74 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "74", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "74 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "75 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "75", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "75 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "77", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "77 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "77", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "77 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "78", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "78 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "79", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "79 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "79", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "79 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "82", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "82 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "82", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "82 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "82", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "82 (3)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "84", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "84 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "84", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "84 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "85 (1)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "85", + "defence": "61", + "slayer-level": "1", + "experience": 152.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 50.29999923706055, + "max-melee": "244", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "85 (2)", + "slayer-exp": -1, + "lifepoints": "3050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie (Stronghold of Security)", + "variants": [ + { + "image": "", + "level": "12", + "defence": "9", + "slayer-level": "1", + "experience": 95, + "susceptible": ["<\/a>"], + "lifepoint-exp": 31.299999237060547, + "max-melee": "180", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 12", + "slayer-exp": -1, + "lifepoints": "1900", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "21", + "defence": "15", + "slayer-level": "1", + "experience": 132.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 43.70000076293945, + "max-melee": "300", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 21", + "slayer-exp": -1, + "lifepoints": "2650", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (Temple Trekking)", + "variants": [{ + "image": "", + "level": "28", + "defence": "20", + "slayer-level": "?", + "experience": 50, + "susceptible": [], + "lifepoint-exp": 16.5, + "max-melee": "0", + "weakness": [], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "Zombie (The Shadow Reef)", + "variants": [ + { + "image": "", + "level": "108", + "defence": "67", + "slayer-level": "0", + "experience": 600, + "susceptible": ["<\/a>"], + "lifepoint-exp": 198, + "max-melee": "384", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": 504, + "lifepoints": "12000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "108", + "defence": "67", + "slayer-level": "0", + "experience": 300, + "susceptible": ["<\/a>"], + "lifepoint-exp": 99, + "max-melee": "384", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": 504, + "lifepoints": "6000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zombie (Uncharted Isles)", + "variants": [ + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 236, + "susceptible": [], + "lifepoint-exp": 77.80000305175781, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Male", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 236, + "susceptible": [], + "lifepoint-exp": 77.80000305175781, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Female", + "slayer-exp": -1, + "lifepoints": "1000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "93", + "defence": "67", + "slayer-level": "1", + "experience": 236, + "susceptible": [], + "lifepoint-exp": 77.80000305175781, + "max-melee": "1515", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Aggressive", + "slayer-exp": -1, + "lifepoints": "4950", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie (Wilderness)", + "variants": [ + { + "image": "", + "level": "22", + "defence": "16", + "slayer-level": "?", + "experience": 40, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13.199999809265137, + "max-melee": "64", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 22 (1)", + "slayer-exp": -1, + "lifepoints": "800", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "22", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 22 (2)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "22", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 22 (3)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (1)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (2)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (3)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }, + { + "image": "", + "level": "29", + "defence": "21", + "slayer-level": "?", + "experience": 52.5, + "susceptible": ["<\/a>"], + "lifepoint-exp": 17.299999237060547, + "max-melee": "105", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Level 29 (4)", + "slayer-exp": -1, + "lifepoints": "1050", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + } + ] + }, + { + "name": "Zombie (Zogre Flesh Eaters)", + "variants": [{ + "image": "", + "level": "36", + "defence": "26", + "slayer-level": "?", + "experience": 65, + "susceptible": ["<\/a>"], + "lifepoint-exp": 21.399999618530273, + "max-melee": "156", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Default", + "slayer-exp": -1, + "lifepoints": "1300", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "?" + }] + }, + { + "name": "The Ambassador", + "variants": [ + { + "image": "", + "level": "5500", + "defence": "75", + "slayer-level": "?", + "experience": 25000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8250, + "max-melee": "3300", + "weakness": ["<\/a>"], + "max-spec": "9000", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "1000000", + "max-ranged": "2200", + "max-magic": "10000", + "max-necromancy": "0" + }, + { + "image": "", + "level": "5500", + "defence": "75", + "slayer-level": "?", + "experience": 25000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 8250, + "max-melee": "330", + "weakness": ["<\/a>"], + "max-spec": "900", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "500000", + "max-ranged": "220", + "max-magic": "1000", + "max-necromancy": "0" + } + ] + }, + { + "name": "Araxxi", + "variants": [{ + "image": "", + "level": "3000", + "defence": "80", + "slayer-level": "-4", + "experience": 2500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 825, + "max-melee": "1653", + "weakness": ["<\/a>"], + "max-spec": "10700", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "100000", + "max-ranged": "1653", + "max-magic": "1653", + "max-necromancy": "0" + }] + }, + { + "name": "Chaos Elemental", + "variants": [ + { + "image": "", + "level": "305", + "defence": "69", + "slayer-level": "?", + "experience": 862, + "susceptible": ["<\/a>"], + "lifepoint-exp": 284.3999938964844, + "max-melee": "1104", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "F2P", + "slayer-exp": -1, + "lifepoints": "17250", + "max-ranged": "1104", + "max-magic": "1104", + "max-necromancy": "0" + }, + { + "image": "", + "level": "305", + "defence": "69", + "slayer-level": "?", + "experience": 862, + "susceptible": ["<\/a>"], + "lifepoint-exp": 284.3999938964844, + "max-melee": "1104", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "P2P", + "slayer-exp": -1, + "lifepoints": "17250", + "max-ranged": "1104", + "max-magic": "1104", + "max-necromancy": "0" + } + ] + }, + { + "name": "Commander Zilyana", + "variants": [ + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Aftermath", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Battle of the Monolith", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Council of Burthorpe", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Extinction", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Gower Quest", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Missing, Presumed Death", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Once Upon a Time in Gielinor", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Senntisten", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "The World Wakes", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + } + ] + }, + { + "name": "Croesus", + "variants": [ + { + "image": "", + "level": "6000", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Active", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "6000", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dormant", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + } + ] + }, + { + "name": "Corporeal Beast", + "variants": [{ + "image": "", + "level": "785", + "defence": "75", + "slayer-level": "-4", + "experience": 2500, + "susceptible": [], + "lifepoint-exp": 825, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "100000", + "max-ranged": "720", + "max-magic": "720", + "max-necromancy": "0" + }] + }, + { + "name": "General Graardor", + "variants": [ + { + "image": "", + "level": "624", + "defence": "72", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Hard mode", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "624", + "defence": "75", + "slayer-level": "?", + "experience": 2000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 660, + "max-melee": "7000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "40000", + "max-ranged": "1676", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "210", + "defence": "72", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "4800", + "name": "The Mighty Fall", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "210", + "defence": "72", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "The World Wakes", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Giant mole", + "variants": [ + { + "image": "", + "level": "230", + "defence": "45", + "slayer-level": "?", + "experience": 1950, + "susceptible": ["<\/a>"], + "lifepoint-exp": 643.5, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "2800", + "name": "Hard Mode", + "slayer-exp": -1, + "lifepoints": "78000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "230", + "defence": "45", + "slayer-level": "?", + "experience": 1950, + "susceptible": ["<\/a>"], + "lifepoint-exp": 643.5, + "max-melee": "720", + "weakness": ["<\/a>"], + "max-spec": "2800", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "78000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Gregorovic", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "2300", + "weakness": ["<\/a>"], + "max-spec": "2300", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "2300", + "max-magic": "1800", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "2300", + "weakness": ["<\/a>"], + "max-spec": "2300", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "2300", + "max-magic": "1800", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "80", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Sliske's Endgame", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + } + ] + }, + { + "name": "Har-Aken", + "variants": [ + { + "image": "", + "level": "800", + "defence": "80", + "slayer-level": "?", + "experience": 3750, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1237.5, + "max-melee": "1152", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Head", + "slayer-exp": -1, + "lifepoints": "150000", + "max-ranged": "1152", + "max-magic": "1152", + "max-necromancy": "0" + }, + { + "image": "", + "level": "800", + "defence": "76", + "slayer-level": "?", + "experience": 350, + "susceptible": ["<\/a>"], + "lifepoint-exp": 115.5, + "max-melee": "820", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Magic Tentacle", + "slayer-exp": -1, + "lifepoints": "7000", + "max-ranged": "1094", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "800", + "defence": "76", + "slayer-level": "?", + "experience": 350, + "susceptible": ["<\/a>"], + "lifepoint-exp": 115.5, + "max-melee": "820", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Ranged Tentacle", + "slayer-exp": -1, + "lifepoints": "7000", + "max-ranged": "1094", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Helwyr", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1296", + "weakness": ["<\/a>"], + "max-spec": "6000", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1224", + "weakness": ["<\/a>"], + "max-spec": "3000", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Hermod, the Spirit of War", + "variants": [ + { + "image": "", + "level": "732", + "defence": "70", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2250", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "1750" + }, + { + "image": "", + "level": "732", + "defence": "70", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "2250", + "name": "Quest", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "1750" + } + ] + }, + { + "name": "Nex", + "variants": [ + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Magic", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Melee", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Ranged", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1001", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1250", + "weakness": ["<\/a>"], + "max-spec": "8000", + "name": "Standard", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1250", + "max-magic": "1250", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nex: Angel of Death", + "variants": [{ + "image": "", + "level": "7000", + "defence": "99", + "slayer-level": "-4", + "experience": 75000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 24750, + "max-melee": "2123", + "weakness": ["<\/a>"], + "max-spec": "75000", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "3000000", + "max-ranged": "2123", + "max-magic": "2123", + "max-necromancy": "0" + }] + }, + { + "name": "Raksha, the Shadow Colossus", + "variants": [ + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "During fight", + "slayer-exp": -1, + "lifepoints": "800000", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "During fight (duo)", + "slayer-exp": -1, + "lifepoints": "1600000", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Shackled", + "slayer-exp": -1, + "lifepoints": "N/A", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + }, + { + "image": "", + "level": "6000", + "defence": "85", + "slayer-level": "?", + "experience": 40000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 13200, + "max-melee": "2570", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Subdued", + "slayer-exp": -1, + "lifepoints": "N/A", + "max-ranged": "2570", + "max-magic": "2570", + "max-necromancy": "0" + } + ] + }, + { + "name": "Rasial, the First Necromancer", + "variants": [ + { + "image": "", + "level": "8462", + "defence": "95", + "slayer-level": "?", + "experience": 20000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6600, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "11500", + "name": "Alpha vs Omega", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "2300" + }, + { + "image": "", + "level": "8462", + "defence": "95", + "slayer-level": "?", + "experience": 18000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 5940, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "11500", + "name": "Normal", + "slayer-exp": -1, + "lifepoints": "800000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "2300" + } + ] + }, + { + "name": "Seiryu the Azure Serpent", + "variants": [ + { + "image": "", + "level": "10000", + "defence": "80", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "1368", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "7500000", + "max-ranged": "1368", + "max-magic": "1368", + "max-necromancy": "0" + }, + { + "image": "", + "level": "10000", + "defence": "80", + "slayer-level": "?", + "experience": 187500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 61875, + "max-melee": "?", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "3750000", + "max-ranged": "?", + "max-magic": "?", + "max-necromancy": "0" + } + ] + }, + { + "name": "Solak", + "variants": [ + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Left arm", + "slayer-exp": -1, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Left leg", + "slayer-exp": -1, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Right arm", + "slayer-exp": -1, + "lifepoints": "45000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "60", + "slayer-level": "?", + "experience": 0, + "susceptible": [], + "lifepoint-exp": 0, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Right leg", + "slayer-exp": -1, + "lifepoints": "35000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7000", + "defence": "70", + "slayer-level": "?", + "experience": 200000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 66000, + "max-melee": "4000", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Solak", + "slayer-exp": -1, + "lifepoints": "2000000", + "max-ranged": "4000", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "7000", + "defence": "60", + "slayer-level": "?", + "experience": 8000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2640, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "12000", + "name": "Withering", + "slayer-exp": -1, + "lifepoints": "125000", + "max-ranged": "0", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Telos, the Warden", + "variants": [ + { + "image": "", + "level": "2000", + "defence": "80", + "slayer-level": "?", + "experience": -2, + "susceptible": [], + "lifepoint-exp": -2, + "max-melee": "N/A", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Dormant", + "slayer-exp": -1, + "lifepoints": "N/A", + "max-ranged": "N/A", + "max-magic": "N/A", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "80", + "slayer-level": "?", + "experience": 5000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 1650, + "max-melee": "0", + "weakness": ["<\/a>"], + "max-spec": "Varies", + "name": "Phase 5", + "slayer-exp": -1, + "lifepoints": "100000", + "max-ranged": "0", + "max-magic": "1324", + "max-necromancy": "0" + }, + { + "image": "", + "level": "2000", + "defence": "80", + "slayer-level": "?", + "experience": 20000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 6600, + "max-melee": "1324", + "weakness": ["<\/a>"], + "max-spec": "5555", + "name": "Standard", + "slayer-exp": -1, + "lifepoints": "400000", + "max-ranged": "0", + "max-magic": "1324", + "max-necromancy": "0" + } + ] + }, + { + "name": "Nymora, the Vengeful", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 12500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4125, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "250000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "350000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "0" + } + ] + }, + { + "name": "Avaryss, the Unceasing", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 17500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 5775, + "max-melee": "864", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Challenge Mode", + "slayer-exp": -1, + "lifepoints": "350000", + "max-ranged": "864", + "max-magic": "864", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1000", + "defence": "N/A", + "slayer-level": "?", + "experience": 0, + "susceptible": ["<\/a>"], + "lifepoint-exp": 0, + "max-melee": "N/A", + "weakness": ["<\/a>"], + "max-spec": "N/A", + "name": "Daughter of Chaos", + "slayer-exp": -1, + "lifepoints": "500000", + "max-ranged": "N/A", + "max-magic": "N/A", + "max-necromancy": "?" + }, + { + "image": "", + "level": "1000", + "defence": "70", + "slayer-level": "?", + "experience": 12500, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4125, + "max-melee": "816", + "weakness": ["<\/a>"], + "max-spec": "7140", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "250000", + "max-ranged": "816", + "max-magic": "816", + "max-necromancy": "?" + } + ] + }, + { + "name": "TzKal-Zuk", + "variants": [ + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1837", + "weakness": ["<\/a>"], + "max-spec": "15000", + "name": "Hard Mode", + "slayer-exp": -1, + "lifepoints": "1200000", + "max-ranged": "1837", + "max-magic": "1837", + "max-necromancy": "0" + }, + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1837", + "weakness": ["<\/a>"], + "max-spec": "15000", + "name": "Normal Mode", + "slayer-exp": -1, + "lifepoints": "600000", + "max-ranged": "1837", + "max-magic": "1837", + "max-necromancy": "0" + } + ] + }, + { + "name": "TzTok-Jad", + "variants": [{ + "image": "", + "level": "702", + "defence": "70", + "slayer-level": "1", + "experience": 1000, + "susceptible": [], + "lifepoint-exp": 330, + "max-melee": "8000", + "weakness": ["<\/a>"], + "max-spec": "0", + "name": "Default", + "slayer-exp": 1309, + "lifepoints": "40000", + "max-ranged": "8000", + "max-magic": "8000", + "max-necromancy": "0" + }] + }, + { + "name": "Vindicta", + "variants": [ + { + "image": "", + "level": "1000", + "defence": "85", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "4500", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Hard mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "2500", + "max-magic": "0", + "max-necromancy": "0" + }, + { + "image": "", + "level": "1000", + "defence": "75", + "slayer-level": "?", + "experience": 10000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 3300, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "?", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "200000", + "max-ranged": "1500", + "max-magic": "0", + "max-necromancy": "0" + } + ] + }, + { + "name": "Vorago", + "variants": [{ + "image": "", + "level": "10000", + "defence": "90", + "slayer-level": "-4", + "experience": 6250, + "susceptible": ["<\/a>"], + "lifepoint-exp": 2062.5, + "max-melee": "3000", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Default", + "slayer-exp": -4, + "lifepoints": "250000", + "max-ranged": "5000", + "max-magic": "5000", + "max-necromancy": "0" + }] + }, + { + "name": "Zamorak, Lord of Chaos", + "variants": [ + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Hard mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "1819", + "max-magic": "1819", + "max-necromancy": "0" + }, + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Normal mode", + "slayer-exp": -1, + "lifepoints": "300000", + "max-ranged": "1819", + "max-magic": "1819", + "max-necromancy": "0" + }, + { + "image": "", + "level": "14000", + "defence": "80", + "slayer-level": "?", + "experience": 15000, + "susceptible": ["<\/a>"], + "lifepoint-exp": 4950, + "max-melee": "1819", + "weakness": ["<\/a>"], + "max-spec": "11000", + "name": "Story mode", + "slayer-exp": -1, + "lifepoints": "150000", + "max-ranged": "1819", + "max-magic": "1819", + "max-necromancy": "0" + } + ] + }, + { + "name": "Zemouregal", + "variants": [ + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Defender of Varrock (1)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Defender of Varrock (2)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat (fort, skeletal)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ritual of the Mahjarrat (fort)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Nadir", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "The World Wakes", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Missing, Presumed Death", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves (lair)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves (lair, examinable)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dishonour among Thieves (cutscene)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dimension of Disaster", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Children of Mah", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Children of Mah (examinable)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Children of Mah (Freneskae cutscene)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "TzekHaar Front", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Daughter of Chaos", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Succession", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Succession (skeletal)", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Unwelcome Guests", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Dead and Buried", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Ancient Awakening", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Battle of Forinthry", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + }, + { + "image": "", + "level": "?", + "defence": "-4", + "slayer-level": "-4", + "experience": -4, + "susceptible": [], + "lifepoint-exp": -4, + "max-melee": "-4", + "weakness": [], + "max-spec": "-4", + "name": "Requiem for a Dragon", + "slayer-exp": -4, + "lifepoints": "-4", + "max-ranged": "-4", + "max-magic": "-4", + "max-necromancy": "-4" + } + ] + } +] diff --git a/src/data/old/masters.json b/src/data/old/masters.json new file mode 100644 index 0000000..cdca203 --- /dev/null +++ b/src/data/old/masters.json @@ -0,0 +1,496 @@ +[ + { + "task-counts": { + "Gelatinous abominations": "10-20", + "Trolls": "10-20", + "Wolves": "10-20", + "Cave bugs": "10-20", + "Cows": "10-25", + "Birds": "10-20", + "Crawling hands": "10-20" + }, + "name": "Turael", + "id": 1, + "url": "https://runescape.wiki/w/Turael" + }, + { + "task-counts": { + "Frogs": "15-30", + "Goblins": "15-30", + "Bats": "15-30", + "Ghosts": "15-25", + "Skeletons": "15-25", + "Spiders": "15-25", + "Zombies": "15-30", + "Cave slimes": "10-25", + "Cave bugs": "15-30", + "Cows": "15-30", + "Rats": "15-30", + "Birds": "15-30" + }, + "name": "Jacquelyn", + "id": 2, + "url": "https://runescape.wiki/w/Jacquelyn" + }, + { + "task-counts": { + "Frogs": "40-60", + "Bats": "40-60", + "Hill giants": "40-60", + "Wall beasts": "10-20", + "Zombies": "40-60", + "Cave slimes": "40-60", + "Mogres": "40-60", + "Moss giants": "40-60", + "Hobgoblins": "40-60", + "Bears": "20-40", + "Ice warriors": "40-60", + "Ghosts": "40-70", + "Skeletons": "40-60", + "Icefiends": "40-60", + "Minotaurs": "40-60", + "Scorpions": "40-60", + "Spiders": "40-60", + "Wolves": "40-60", + "Grotworms": "40-60", + "Kalphite": "40-60", + "Catablepon": "40-60", + "Fleshcrawlers": "40-60", + "Ice giants": "40-60", + "Cockroaches": "40-60" + }, + "name": "Vannaka", + "id": 3, + "url": "https://runescape.wiki/w/Vannaka" + }, + { + "task-counts": { + "Demons": "45-90", + "Aviansies": "50-110", + "Lesser demons": "120-180", + "Abyssal Demons": "140-260", + "Skeletons": "95-125", + "Undead": "130-170", + "Black demons": "110-160", + "Dark beasts": "120-180", + "Dragons": "60-90", + "Grotworms": "140-190", + "Zemouregal's undead": "110-150", + "Hellhounds": "70-110", + "Living wyverns": "40-65", + "Fire giants": "110-160", + "Ankou": "80-120", + "Dagannoth": "190-250", + "Zombies": "100-140", + "Fetid zombies": "140-170", + "Armoured phantoms": "45-55", + "Ghosts": "160-180", + "Green dragons": "70-120", + "Acheron mammoths": "20-45", + "Risen ghosts": "90-120", + "Aberrant spectres": "50-80", + "Kalphite": "65-110", + "Black dragons": "70-120", + "Camel warriors": "30-55", + "Greater demons": "140-200", + "Bound skeletons": "120-140", + "Ripper demons": "40-65" + }, + "name": "The Raptor", + "id": 4, + "url": "https://runescape.wiki/w/The_Raptor" + }, + { + "task-counts": { + "Desert lizards": "50-90", + "Werewolves": "50-90", + "Killerwatts": "60-100", + "Lesser demons": "60-100", + "Moss giants": "50-90", + "Banshees": "50-90", + "Ice warriors": "40-60", + "Shades": "60-100", + "Cockatrice": "50-90", + "Earth warriors": "35-55", + "Grotworms": "60-100", + "Jellies": "60-100", + "Otherworldly beings": "60-100", + "Bloodveld": "60-100", + "Cyclopes": "50-90", + "Basilisks": "60-100", + "Shadow warriors": "60-100", + "Brine rats": "60-100", + "Ice giants": "50-90", + "Cave crawlers": "50-90", + "Jungle horrors": "60-100", + "Ogres": "60-100", + "Ankou": "60-100", + "Sea snakes": "60-100", + "Infernal mages": "60-100", + "Turoth": "60-100", + "Crocodiles": "50-90", + "Green dragons": "35-55", + "Vampyres": "50-90", + "Aberrant spectres": "60-100", + "Dogs": "50-90", + "Molanisks": "50-90", + "Rockslugs": "50-90", + "Ghouls": "60-100", + "Pyrefiends": "60-100" + }, + "name": "Mazchna", + "id": 5, + "url": "https://runescape.wiki/w/Mazchna" + }, + { + "task-counts": { + "Warped tortoises": "110-170", + "Dust devils": "110-170", + "Elves": "60-90", + "Cave horrors": "110-170", + "Lesser demons": "110-170", + "Crawling hands": "110-170", + "Gargoyles": "110-170", + "Banshees": "110-170", + "Grifolaroos": "50-65", + "Jungle strykewyrms": "80-110", + "Trolls": "110-170", + "Grotworms": "70-110", + "Jellies": "110-170", + "Bloodveld": "110-170", + "Basilisks": "110-170", + "Shadow warriors": "110-170", + "Harpie bug swarms": "110-170", + "Brine rats": "110-170", + "Fever spiders": "110-170", + "Cave crawlers": "110-170", + "Fire giants": "110-170", + "Jungle horrors": "110-170", + "Grifolapines": "50-65", + "Mutated zygomites": "30-60", + "Dagannoth": "110-170", + "Blue dragons": "110-170", + "Infernal mages": "110-170", + "Bronze dragons": "30-60", + "Turoth": "110-170", + "Kurask": "110-170", + "Aberrant spectres": "110-170", + "Kalphite": "110-170", + "Fungal magi": "80-105", + "Vyrewatch": "80-110" + }, + "name": "Chaeldar", + "id": 6, + "url": "https://runescape.wiki/w/Chaeldar" + }, + { + "task-counts": { + "Desert lizards": "150-250", + "Warped tortoises": "120-185", + "Dust devils": "120-185", + "Elves": "60-90", + "Cave horrors": "120-185", + "Spiritual warriors": "120-185", + "Aviansies": "50-100", + "Gargoyles": "120-195", + "Banshees": "120-185", + "Grifolaroos": "55-75", + "Red dragons": "30-60", + "Spiritual mages": "120-185", + "Jungle strykewyrms": "90-120", + "Abyssal Demons": "120-185", + "Trolls": "120-185", + "Scorpions": "150-250", + "Nechryael": "120-185", + "Black demons": "120-185", + "Grotworms": "70-120", + "Bloodveld": "120-185", + "Cres's creations": "65-80", + "Basilisks": "120-185", + "Cave crawlers": "120-185", + "Hellhounds": "120-185", + "Fire giants": "120-185", + "Grifolapines": "55-75", + "Scabarites": "30-60", + "Mutated jadinkos": "80-130", + "Dagannoth": "120-185", + "Blue dragons": "120-185", + "Aquanites": "120-185", + "Iron dragons": "30-60", + "Corrupted creatures": "175-300", + "Turoth": "120-185", + "Crocodiles": "150-250", + "Kurask": "120-185", + "Desert strykewyrms": "90-110", + "Soul devourers": "175-300", + "Terror dogs": "30-60", + "Aberrant spectres": "120-185", + "Kalphite": "120-185", + "Fungal magi": "90-110", + "Greater demons": "120-185", + "Vyrewatch": "90-120" + }, + "name": "Sumona", + "id": 7, + "url": "https://runescape.wiki/w/Sumona" + }, + { + "task-counts": { + "Dust devils": "130-200", + "Waterfiends": "130-200", + "Aviansies": "100-125", + "Celestial dragons": "125-150", + "Ganodermic creatures": "55-70", + "Gargoyles": "130-200", + "Grifolaroos": "60-85", + "Airut": "125-150", + "Spiritual mages": "130-200", + "Jungle strykewyrms": "90-120", + "Abyssal Demons": "130-200", + "Nechryael": "130-200", + "Black demons": "130-200", + "Dark beasts": "130-200", + "Grotworms": "80-120", + "Bloodveld": "130-200", + "Cres's creations": "65-80", + "Skeletal wyverns": "40-80", + "Suqahs": "40-80", + "Hellhounds": "130-200", + "Fire giants": "130-200", + "Grifolapines": "60-85", + "Scabarites": "40-80", + "Mutated jadinkos": "120-200", + "Dagannoth": "130-200", + "Goraks": "40-80", + "Aquanites": "130-200", + "Iron dragons": "40-80", + "Desert strykewyrms": "90-140", + "Ascension members": "100-125", + "Aberrant spectres": "130-200", + "Kalphite": "130-200", + "Black dragons": "40-80", + "Warped terrorbirds": "130-200", + "Steel dragons": "40-80", + "Edimmu": "130-200", + "Fungal magi": "100-200", + "Greater demons": "130-200", + "Ice strykewyrms": "100-200", + "Mithril dragons": "4-8", + "Vyrewatch": "90-120" + }, + "name": "Duradel", + "id": 8, + "url": "https://runescape.wiki/w/Duradel" + }, + { + "task-counts": { + "Chaos giants": "60-100", + "TzHaar": "80-110", + "Warped tortoises": "150-240", + "Elves": "120-150", + "Glacors": "50-70", + "Waterfiends": "170-250", + "Adamant dragons": "40-50", + "Aviansies": "125-150", + "Kal'gerion demons": "50-100", + "Muspah": "125-150", + "Grifolaroos": "65-80", + "Airut": "125-150", + "Spiritual mages": "150-240", + "Stalker creatures": "120-170", + "Nechryael": "140-220", + "Black demons": "190-250", + "Cres's creations": "65-80", + "Skeletal wyverns": "40-90", + "Gemstone dragons": "60-100", + "Hellhounds": "130-220", + "Lava strykewyrms": "50-100", + "Living wyverns": "30-55", + "Fire giants": "170-250", + "Mutated jadinkos": "160-220", + "Nihil": "40-90", + "Corrupted creatures": "150-250", + "Terror dogs": "60-70", + "Ascension members": "100-125", + "Camel warriors": "25-45", + "Greater demons": "150-250", + "Ice strykewyrms": "100-200", + "Vyrewatch": "90-130", + "Dust devils": "150-250", + "Tormented demons": "40-60", + "Celestial dragons": "125-150", + "Ganodermic creatures": "70-90", + "Gargoyles": "150-250", + "Jungle strykewyrms": "90-130", + "Abyssal Demons": "150-250", + "Living rock creatures": "120-170", + "Dark beasts": "150-250", + "Grotworms": "80-150", + "Bloodveld": "180-250", + "Suqahs": "50-100", + "Grifolapines": "65-80", + "Nightmare creatures": "100-120", + "Dagannoth": "170-240", + "Blue dragons": "120-200", + "Aquanites": "160-200", + "Iron dragons": "60-110", + "Desert strykewyrms": "90-160", + "Soul devourers": "150-250", + "Acheron mammoths": "20-45", + "Aberrant spectres": "150-250", + "Kalphite": "170-250", + "Black dragons": "40-90", + "Steel dragons": "40-100", + "Edimmu": "150-250", + "Ripper demons": "50-75", + "Mithril dragons": "30-35" + }, + "name": "Kuradal", + "id": 9, + "url": "https://runescape.wiki/w/Kuradal" + }, + { + "task-counts": { + "Chaos giants": "80-120", + "TzHaar": "95-130", + "Elves": "150-180", + "Glacors": "60-85", + "Nodon dragonkin": "90-130", + "Waterfiends": "205-300", + "Adamant dragons": "40-60", + "Aviansies": "150-180", + "Kal'gerion demons": "60-120", + "Muspah": "150-180", + "Crystal shapeshifters": "110-150", + "Airut": "150-180", + "Stalker creatures": "140-190", + "Nechryael": "170-265", + "Black demons": "230-300", + "Cres's creations": "80-100", + "Gemstone dragons": "80-130", + "Lava strykewyrms": "60-120", + "Living wyverns": "40-65", + "Mutated jadinkos": "195-265", + "Nihil": "50-110", + "Corrupted creatures": "150-250", + "Ascension members": "120-150", + "Camel warriors": "35-55", + "Greater demons": "180-300", + "Ice strykewyrms": "120-240", + "Vyrewatch": "110-155", + "Tormented demons": "50-75", + "Celestial dragons": "150-180", + "Ganodermic creatures": "85-110", + "Gargoyles": "180-300", + "Abyssal Demons": "180-300", + "Dark beasts": "180-300", + "Grotworms": "100-180", + "Creatures of the Lost Grove": "100-120", + "Nightmare creatures": "110-160", + "Dagannoth": "205-290", + "Rune dragons": "50-75", + "Aquanites": "195-240", + "Iron dragons": "75-130", + "Shadow creatures": "100-150", + "Desert strykewyrms": "110-190", + "Soul devourers": "150-250", + "Acheron mammoths": "30-55", + "Kalphite": "205-300", + "Black dragons": "50-110", + "Steel dragons": "50-125", + "Edimmu": "170-265", + "Ripper demons": "60-85", + "Mithril dragons": "30-50" + }, + "name": "Morvran", + "id": 10, + "url": "https://runescape.wiki/w/Morvran" + }, + { + "task-counts": { + "Chaos giants": "80-120", + "Elves": "150-180", + "Glacors": "60-85", + "Nodon dragonkin": "110-150", + "Adamant dragons": "40-60", + "Aviansies": "150-180", + "Kal'gerion demons": "60-120", + "Muspah": "150-180", + "Crystal shapeshifters": "110-150", + "Airut": "150-180", + "Stalker creatures": "140-190", + "Black demons": "230-300", + "Dragons": "101-150", + "Cres's creations": "80-100", + "Gemstone dragons": "80-130", + "Lava strykewyrms": "60-120", + "Living wyverns": "40-65", + "Mutated jadinkos": "195-265", + "Nihil": "50-110", + "Corrupted creatures": "150-250", + "Armoured phantoms": "55-65", + "Vile blooms": "70-110", + "Ascension members": "120-150", + "Camel warriors": "35-55", + "Greater demons": "180-300", + "Ice strykewyrms": "120-240", + "Vyrewatch": "110-155", + "Demons": "101-150", + "Tormented demons": "50-75", + "Celestial dragons": "150-180", + "Ganodermic creatures": "85-110", + "Gargoyles": "180-300", + "Abyssal Demons": "180-300", + "Undead": "120-160", + "Dark beasts": "180-300", + "Creatures of the Lost Grove": "100-120", + "Dinosaurs": "70-110", + "Nightmare creatures": "110-162", + "Dagannoth": "205-290", + "Rune dragons": "50-75", + "Aquanites": "195-240", + "Iron dragons": "75-130", + "Shadow creatures": "100-150", + "Soul devourers": "150-250", + "Acheron mammoths": "30-55", + "Risen ghosts": "120-160", + "Creatures of Daemonheim": "101-150", + "Kalphite": "205-300", + "Black dragons": "50-110", + "Steel dragons": "50-125", + "Strykewyrms": "101-150", + "Edimmu": "170-265", + "Ripper demons": "60-85", + "Mithril dragons": "30-50" + }, + "name": "Laniakea", + "id": 11, + "url": "https://runescape.wiki/w/Laniakea" + }, + { + "task-counts": { + "Soulgazers": "140-190", + "Glacors": "70-100", + "Abyssal beasts": "140-200", + "Kal'gerion demons": "60-120", + "Gargoyles": "180-300", + "Greater demon berserkers and ash lords": "50-80", + "Hydrix dragons": "90-140", + "Revenants": "50-80", + "Abyssal Demons": "180-300", + "Abyssal lords": "100-150", + "Abyssal savages": "180-250", + "Acheron mammoths": "40-60", + "Black demons": "200-280", + "Dark beasts": "180-300", + "Onyx dragons": "100-150", + "Ripper demons": "70-95", + "Ice strykewyrms": "100-150", + "Lava strykewyrms": "60-120", + "Living wyverns": "50-75" + }, + "name": "Mandrith", + "id": 12, + "url": "https://runescape.wiki/w/Mandrith" + } +] diff --git a/src/data/reapers.json b/src/data/reapers.json new file mode 100644 index 0000000..fb989d1 --- /dev/null +++ b/src/data/reapers.json @@ -0,0 +1,490 @@ +[ + { + "default-creature": "Araxxi#Default", + "weakness": [], + "creatures": ["Araxxi"], + "hidden-creatures": [], + "index": "Araxxi", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Arch-Glacor#Normal mode", + "weakness": [], + "creatures": ["Arch-Glacor"], + "hidden-creatures": [], + "index": "Arch-Glacor", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Black stone dragon#Default", + "weakness": [], + "creatures": ["Black stone dragon"], + "hidden-creatures": [], + "index": "Black stone dragon", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Chaos Elemental#P2P", + "weakness": [], + "creatures": ["Chaos Elemental"], + "hidden-creatures": [], + "index": "Chaos Elemental", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "weakness": [], + "creatures": ["Commander Zilyana"], + "hidden-creatures": [], + "index": "Commander Zilyana", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Corporeal Beast#Default", + "weakness": [], + "creatures": ["Corporeal Beast"], + "hidden-creatures": [], + "index": "Corporeal Beast", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Croesus#Active", + "weakness": [], + "creatures": ["Croesus"], + "hidden-creatures": [], + "index": "Croesus", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Dagannoth Rex#Default", + "weakness": [], + "creatures": [ + "Dagannoth Prime", + "Dagannoth Rex", + "Dagannoth Supreme" + ], + "hidden-creatures": [], + "index": "Dagannoth Kings", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "General Graardor#Normal", + "weakness": [], + "creatures": ["General Graardor"], + "hidden-creatures": [], + "index": "General Graardor", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Giant mole#Normal", + "weakness": [], + "creatures": ["Giant mole"], + "hidden-creatures": [], + "index": "Giant mole", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Gregorovic#Normal Mode", + "weakness": [], + "creatures": ["Gregorovic"], + "hidden-creatures": [], + "index": "Gregorovic", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Har-Aken#Head", + "weakness": [], + "creatures": ["Har-Aken"], + "hidden-creatures": [], + "index": "Har-Aken", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Helwyr#Normal Mode", + "weakness": [], + "creatures": ["Helwyr"], + "hidden-creatures": [], + "index": "Helwyr", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Hermod, the Spirit of War#Normal", + "weakness": [], + "creatures": ["Hermod, the Spirit of War"], + "hidden-creatures": [], + "index": "Hermod, the Spirit of War", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "K'ril Tsutsaroth#Normal", + "weakness": [], + "creatures": ["K'ril Tsutsaroth"], + "hidden-creatures": [], + "index": "K'ril Tsutsaroth", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kalphite King#Magic", + "weakness": [], + "creatures": ["Kalphite King"], + "hidden-creatures": [], + "index": "Kalphite King", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kalphite Queen#First form", + "weakness": [], + "creatures": ["Kalphite Queen"], + "hidden-creatures": [], + "index": "Kalphite Queen", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kerapac, the bound#Normal mode", + "weakness": [], + "creatures": ["Kerapac, the bound"], + "hidden-creatures": [], + "index": "Kerapac, the bound", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "King Black Dragon#Default", + "weakness": [], + "creatures": ["King Black Dragon"], + "hidden-creatures": [], + "index": "King Black Dragon", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Kree'arra#Normal", + "weakness": [], + "creatures": ["Kree'arra"], + "hidden-creatures": [], + "index": "Kree'arra", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Legio Primus#Default", + "weakness": [], + "creatures": [ + "Legio Primus", + "Legio Quartus", + "Legio Quintus", + "Legio Secundus", + "Legio Sextus", + "Legio Tertius" + ], + "hidden-creatures": [], + "index": "Legiones", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Nex#Standard", + "weakness": [], + "creatures": ["Nex"], + "hidden-creatures": [], + "index": "Nex", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Nex: Angel of Death#Default", + "weakness": [], + "creatures": ["Nex: Angel of Death"], + "hidden-creatures": [], + "index": "Nex: Angel of Death", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Queen Black Dragon#Normal", + "weakness": [], + "creatures": ["Queen Black Dragon"], + "hidden-creatures": [], + "index": "Queen Black Dragon", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Raksha, the Shadow Colossus#During fight", + "weakness": [], + "creatures": ["Raksha, the Shadow Colossus"], + "hidden-creatures": [], + "index": "Raksha, the Shadow Colossus", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Rasial, the First Necromancer#Normal", + "weakness": [], + "creatures": ["Rasial, the First Necromancer"], + "hidden-creatures": [], + "index": "Rasial, the First Necromancer", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Orikalka#Default", + "weakness": [], + "creatures": [ + "Orikalka", + "Osseous", + "Pthentraken", + "Rathis" + ], + "hidden-creatures": [], + "index": "Rex Matriarchs", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Seiryu the Azure Serpent#Normal mode", + "weakness": [], + "creatures": ["Seiryu the Azure Serpent"], + "hidden-creatures": [], + "index": "Seiryu the Azure Serpent", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Solak#Solak", + "weakness": [], + "creatures": ["Solak"], + "hidden-creatures": [], + "index": "Solak", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Telos, the Warden#Standard", + "weakness": [], + "creatures": ["Telos, the Warden"], + "hidden-creatures": [], + "index": "Telos, the Warden", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "The Ambassador#Normal mode", + "weakness": [], + "creatures": ["The Ambassador"], + "hidden-creatures": [], + "index": "The Ambassador", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Dharok the Wretched#Normal", + "weakness": [], + "creatures": [ + "Ahrim the Blighted", + "Akrisae the Doomed", + "Dharok the Wretched", + "Guthan the Infested", + "Karil the Tainted", + "Linza the Disgraced", + "Torag the Corrupted", + "Verac the Defiled" + ], + "hidden-creatures": [], + "index": "The Barrows Brothers", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Dharok the Wretched#Normal", + "weakness": [], + "creatures": [ + "Ahrim the Blighted", + "Dharok the Wretched", + "Guthan the Infested", + "Karil the Tainted", + "Torag the Corrupted", + "Verac the Defiled" + ], + "hidden-creatures": [], + "index": "The Barrows: Rise of the Six", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "The Magister#Default", + "weakness": [], + "creatures": ["The Magister"], + "hidden-creatures": [], + "index": "The Magister", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Avaryss, the Unceasing#Normal Mode", + "weakness": [], + "creatures": [ + "Avaryss, the Unceasing", + "Nymora, the Vengeful" + ], + "hidden-creatures": [], + "index": "Twin Furies", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "TzKal-Zuk#Normal Mode", + "weakness": [], + "creatures": ["TzKal-Zuk"], + "hidden-creatures": [], + "index": "TzKal-Zuk", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "TzTok-Jad#Default", + "weakness": [], + "creatures": ["TzTok-Jad"], + "hidden-creatures": [], + "index": "TzTok-Jad", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Vindicta#Normal mode", + "weakness": [], + "creatures": ["Vindicta"], + "hidden-creatures": [], + "index": "Vindicta", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Vorago#Default", + "weakness": [], + "creatures": ["Vorago"], + "hidden-creatures": [], + "index": "Vorago", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Zamorak, Lord of Chaos#Normal mode", + "weakness": [], + "creatures": ["Zamorak, Lord of Chaos"], + "hidden-creatures": [], + "index": "Zamorak, Lord of Chaos", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + }, + { + "default-creature": "Vorkath#Normal mode", + "weakness": [], + "creatures": [ + "Vorkath", + "Zemouregal" + ], + "hidden-creatures": [], + "index": "Zemouregal & Vorkath", + "alias": [], + "equipment": [], + "masters": [], + "locations": [] + } +] diff --git a/src/data/version.json b/src/data/version.json new file mode 100644 index 0000000..fe1c0c8 --- /dev/null +++ b/src/data/version.json @@ -0,0 +1,3 @@ +{ + "version": "0.0.17" +} \ No newline at end of file diff --git a/src/dev-appconfig.json b/src/dev-appconfig.json new file mode 100644 index 0000000..0ce3621 --- /dev/null +++ b/src/dev-appconfig.json @@ -0,0 +1,17 @@ +{ + "appName": "Local Slayer Assistant", + "description": "Developement version of Slayer Assistant", + "appUrl": "https://slayer.local/", + "configUrl": "https://slayer.local/appconfig.json", + "iconUrl": "https://slayer.local/images/icon.png", + "defaultWidth": 360, + "defaultHeight": 395, + "minWidth": 360, + "minHeight": 142, + "maxWidth": 400, + "maxHeight": 550, + "requestHandlers": [], + "activators": [ + ], + "permissions": "pixel,gamestate,overlay" +} diff --git a/src/extraFeatures.ts b/src/extraFeatures.ts new file mode 100644 index 0000000..63fe9ce --- /dev/null +++ b/src/extraFeatures.ts @@ -0,0 +1,87 @@ +import * as a1lib from "alt1"; +import { ImgRefData } from 'alt1'; + +import * as slayer from "./modules/slayer"; +import * as logger from "./modules/logger"; + +/* Extra Features for advanced controls in the app + The following functions adds some extra functionality to the app + - Ability to Ctrl+V to paste and image into the app + - Ability to drag and drop and image into the app + These functions can be used inside of alt1 but are not useful (mostly for other browsers) +*/ + +// Listen for pasted (ctrl-v) images, usually used in the browser version of an app +a1lib.PasteInput.listen((img) => { + // Look and see if we can read a slayer task + slayer.findTask(img); +}, (err: any, errid: any) => { + logger.log(`${errid}: ${err}`); +}); + +// Handle events for when a file gets dragged or dropped onto the app +document.addEventListener('dragover', handleDragOverFiles, false); +document.addEventListener('drop', handleFileDropped, false); + +// Convert Blob(file) into Image Data so we can use it with alt1 +var blobToImageData = async function (blob: Blob) { + var blobUrl = URL.createObjectURL(blob); + var img = await new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { return resolve(img); }; + img.onerror = function (err) { return reject(err); }; + img.src = blobUrl; + }); + URL.revokeObjectURL(blobUrl); + var [w, h] = [img.width, img.height]; + var aspectRatio = w / h; + var canvas = document.createElement("canvas"); + canvas.width = w; + canvas.height = h; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); + return ctx.getImageData(0, 0, w, h); +}; + + + +// Handle when a file is dropped onto the app and have it load assignment from the file if it can +async function handleFileDropped(evt: DragEvent): Promise { + evt.stopPropagation(); + evt.preventDefault(); + + const files = evt.dataTransfer?.files; + + // Only accept 1 file at a time + if (files && files.length > 1) { + console.error("We can only process 1 file at a time. Please only drag and drop 1 file at a time!"); + return; + } + + const file = files ? files[0] : null; + + if (file) { + // Skip any files that aren't a supported image type + if (!file.type.match('image/png')) { + console.error("Unsupported file type. Please drop a PNG image."); + return; + } + + try { + const imgData = await blobToImageData(file); + const img = new ImgRefData(imgData, 0, 0); + + // Look and see if we can read a slayer task + slayer.findTask(img); + } catch (error) { + console.error("Error processing the image file:", error); + } + } +} + +// Handle when a file is dragged onto the app and show user we will only make a copy of it (must exist or it won't work sadly) +function handleDragOverFiles(evt) { + evt.stopPropagation(); + evt.preventDefault(); + evt.dataTransfer.dropEffect = 'copy'; +} \ No newline at end of file diff --git a/src/fonts/aa_10px_mono.data.png b/src/fonts/aa_10px_mono.data.png new file mode 100644 index 0000000..9ab23d2 Binary files /dev/null and b/src/fonts/aa_10px_mono.data.png differ diff --git a/src/fonts/aa_10px_mono.fontmeta.json b/src/fonts/aa_10px_mono.fontmeta.json new file mode 100644 index 0000000..1825ca7 --- /dev/null +++ b/src/fonts/aa_10px_mono.fontmeta.json @@ -0,0 +1,11 @@ +{ + "basey": 11, + "spacewidth": 3, + "treshold": 0.6, + "color": [ 255, 255, 255 ], + "unblendmode": "raw", + "shadow": false, + "chars": "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~", + "seconds": ",.-:;\"'", + "spriteid": 17814 +} \ No newline at end of file diff --git a/src/fonts/aa_12px_mono.data.png b/src/fonts/aa_12px_mono.data.png new file mode 100644 index 0000000..9092a23 Binary files /dev/null and b/src/fonts/aa_12px_mono.data.png differ diff --git a/src/fonts/aa_12px_mono.fontmeta.json b/src/fonts/aa_12px_mono.fontmeta.json new file mode 100644 index 0000000..52fb83d --- /dev/null +++ b/src/fonts/aa_12px_mono.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 17, + "spacewidth": 4, + "treshold": 0.6, + "color": [ 255, 255, 255 ], + "unblendmode": "raw", + "shadow": false, + "chars": "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/aa_8px.data.png b/src/fonts/aa_8px.data.png new file mode 100644 index 0000000..1497d8e Binary files /dev/null and b/src/fonts/aa_8px.data.png differ diff --git a/src/fonts/aa_8px.fontmeta.json b/src/fonts/aa_8px.fontmeta.json new file mode 100644 index 0000000..836fbcd --- /dev/null +++ b/src/fonts/aa_8px.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 10, + "spacewidth": 3, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/aa_8px_mono.data.png b/src/fonts/aa_8px_mono.data.png new file mode 100644 index 0000000..78ab096 Binary files /dev/null and b/src/fonts/aa_8px_mono.data.png differ diff --git a/src/fonts/aa_8px_mono.fontmeta.json b/src/fonts/aa_8px_mono.fontmeta.json new file mode 100644 index 0000000..3fe5ab5 --- /dev/null +++ b/src/fonts/aa_8px_mono.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 10, + "spacewidth": 3, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "blackbg", + "shadow": false, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/aa_8px_mono_allcaps.data.png b/src/fonts/aa_8px_mono_allcaps.data.png new file mode 100644 index 0000000..5ff396d Binary files /dev/null and b/src/fonts/aa_8px_mono_allcaps.data.png differ diff --git a/src/fonts/aa_8px_mono_allcaps.fontmeta.json b/src/fonts/aa_8px_mono_allcaps.fontmeta.json new file mode 100644 index 0000000..f9c9de6 --- /dev/null +++ b/src/fonts/aa_8px_mono_allcaps.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 10, + "spacewidth": 3, + "treshold": 0.6, + "color": [ 255, 255, 255 ], + "unblendmode": "raw", + "shadow": false, + "chars": "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~", + "seconds": ",.-:;\"'|" +} \ No newline at end of file diff --git a/src/fonts/aa_9px_mono_allcaps.data.png b/src/fonts/aa_9px_mono_allcaps.data.png new file mode 100644 index 0000000..d6a3068 Binary files /dev/null and b/src/fonts/aa_9px_mono_allcaps.data.png differ diff --git a/src/fonts/aa_9px_mono_allcaps.fontmeta.json b/src/fonts/aa_9px_mono_allcaps.fontmeta.json new file mode 100644 index 0000000..8da56e5 --- /dev/null +++ b/src/fonts/aa_9px_mono_allcaps.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 13, + "spacewidth": 5, + "treshold": 0.6, + "color": [ 255, 255, 255 ], + "unblendmode": "raw", + "shadow": false, + "chars": "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~", + "seconds": ",.-:;\"'|*" +} \ No newline at end of file diff --git a/src/fonts/chatbox/10pt.data.png b/src/fonts/chatbox/10pt.data.png new file mode 100644 index 0000000..d169f66 Binary files /dev/null and b/src/fonts/chatbox/10pt.data.png differ diff --git a/src/fonts/chatbox/10pt.fontmeta.json b/src/fonts/chatbox/10pt.fontmeta.json new file mode 100644 index 0000000..fb9dcd8 --- /dev/null +++ b/src/fonts/chatbox/10pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 7, + "spacewidth": 3, + "treshold": 0.5, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/chatbox/12pt.data.png b/src/fonts/chatbox/12pt.data.png new file mode 100644 index 0000000..bfbbe22 Binary files /dev/null and b/src/fonts/chatbox/12pt.data.png differ diff --git a/src/fonts/chatbox/12pt.fontmeta.json b/src/fonts/chatbox/12pt.fontmeta.json new file mode 100644 index 0000000..6454281 --- /dev/null +++ b/src/fonts/chatbox/12pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 9, + "spacewidth": 3, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/chatbox/14pt.data.png b/src/fonts/chatbox/14pt.data.png new file mode 100644 index 0000000..bc96c2a Binary files /dev/null and b/src/fonts/chatbox/14pt.data.png differ diff --git a/src/fonts/chatbox/14pt.fontmeta.json b/src/fonts/chatbox/14pt.fontmeta.json new file mode 100644 index 0000000..b78e474 --- /dev/null +++ b/src/fonts/chatbox/14pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 10, + "spacewidth": 4, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/chatbox/16pt.data.png b/src/fonts/chatbox/16pt.data.png new file mode 100644 index 0000000..cec666a Binary files /dev/null and b/src/fonts/chatbox/16pt.data.png differ diff --git a/src/fonts/chatbox/16pt.fontmeta.json b/src/fonts/chatbox/16pt.fontmeta.json new file mode 100644 index 0000000..050aa67 --- /dev/null +++ b/src/fonts/chatbox/16pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 12, + "spacewidth": 4, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/chatbox/18pt.data.png b/src/fonts/chatbox/18pt.data.png new file mode 100644 index 0000000..45b4c14 Binary files /dev/null and b/src/fonts/chatbox/18pt.data.png differ diff --git a/src/fonts/chatbox/18pt.fontmeta.json b/src/fonts/chatbox/18pt.fontmeta.json new file mode 100644 index 0000000..4a45205 --- /dev/null +++ b/src/fonts/chatbox/18pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 13, + "spacewidth": 5, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/chatbox/20pt.data.png b/src/fonts/chatbox/20pt.data.png new file mode 100644 index 0000000..e493753 Binary files /dev/null and b/src/fonts/chatbox/20pt.data.png differ diff --git a/src/fonts/chatbox/20pt.fontmeta.json b/src/fonts/chatbox/20pt.fontmeta.json new file mode 100644 index 0000000..33e5e6b --- /dev/null +++ b/src/fonts/chatbox/20pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 14, + "spacewidth": 5, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/chatbox/22pt.data.png b/src/fonts/chatbox/22pt.data.png new file mode 100644 index 0000000..69b387c Binary files /dev/null and b/src/fonts/chatbox/22pt.data.png differ diff --git a/src/fonts/chatbox/22pt.fontmeta.json b/src/fonts/chatbox/22pt.fontmeta.json new file mode 100644 index 0000000..790a34d --- /dev/null +++ b/src/fonts/chatbox/22pt.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 16, + "spacewidth": 6, + "treshold": 0.6, + "color": [ 127, 169, 255 ], + "unblendmode": "removebg", + "shadow": true, + "chars": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%/+?!@#$^~&*()_-=[]{}:;\"'<>\\.,|", + "seconds": ",.-:;\"'" +} \ No newline at end of file diff --git a/src/fonts/pixel_8px_digits.data.png b/src/fonts/pixel_8px_digits.data.png new file mode 100644 index 0000000..da65513 Binary files /dev/null and b/src/fonts/pixel_8px_digits.data.png differ diff --git a/src/fonts/pixel_8px_digits.fontmeta.json b/src/fonts/pixel_8px_digits.fontmeta.json new file mode 100644 index 0000000..ed25c2e --- /dev/null +++ b/src/fonts/pixel_8px_digits.fontmeta.json @@ -0,0 +1,10 @@ +{ + "basey": 7, + "spacewidth": 3, + "treshold": 0.9, + "color": [ 255, 255, 255 ], + "unblendmode": "raw", + "shadow": true, + "chars": "0123456789m()hr", + "seconds": "" +} \ No newline at end of file diff --git a/src/images/creatures/Aberrant spectre#Pollnivneach Slayer Dungeon.png b/src/images/creatures/Aberrant spectre#Pollnivneach Slayer Dungeon.png new file mode 100644 index 0000000..7ea515e Binary files /dev/null and b/src/images/creatures/Aberrant spectre#Pollnivneach Slayer Dungeon.png differ diff --git a/src/images/creatures/Aberrant spectre#Slayer Tower.png b/src/images/creatures/Aberrant spectre#Slayer Tower.png new file mode 100644 index 0000000..7ea515e Binary files /dev/null and b/src/images/creatures/Aberrant spectre#Slayer Tower.png differ diff --git a/src/images/creatures/Abyssal beast#Default.png b/src/images/creatures/Abyssal beast#Default.png new file mode 100644 index 0000000..1843475 Binary files /dev/null and b/src/images/creatures/Abyssal beast#Default.png differ diff --git a/src/images/creatures/Abyssal demon (elite)#Default.png b/src/images/creatures/Abyssal demon (elite)#Default.png new file mode 100644 index 0000000..ac4c194 Binary files /dev/null and b/src/images/creatures/Abyssal demon (elite)#Default.png differ diff --git a/src/images/creatures/Abyssal demon#Default.png b/src/images/creatures/Abyssal demon#Default.png new file mode 100644 index 0000000..19943b9 Binary files /dev/null and b/src/images/creatures/Abyssal demon#Default.png differ diff --git a/src/images/creatures/Abyssal lord#Default.png b/src/images/creatures/Abyssal lord#Default.png new file mode 100644 index 0000000..005bc51 Binary files /dev/null and b/src/images/creatures/Abyssal lord#Default.png differ diff --git a/src/images/creatures/Abyssal savage#Asylum.png b/src/images/creatures/Abyssal savage#Asylum.png new file mode 100644 index 0000000..ba5ddf7 Binary files /dev/null and b/src/images/creatures/Abyssal savage#Asylum.png differ diff --git a/src/images/creatures/Abyssal savage#Wilderness.png b/src/images/creatures/Abyssal savage#Wilderness.png new file mode 100644 index 0000000..ba5ddf7 Binary files /dev/null and b/src/images/creatures/Abyssal savage#Wilderness.png differ diff --git a/src/images/creatures/Acheron mammoth#Default.png b/src/images/creatures/Acheron mammoth#Default.png new file mode 100644 index 0000000..1627245 Binary files /dev/null and b/src/images/creatures/Acheron mammoth#Default.png differ diff --git a/src/images/creatures/Adamant dragon#Default.png b/src/images/creatures/Adamant dragon#Default.png new file mode 100644 index 0000000..0843b76 Binary files /dev/null and b/src/images/creatures/Adamant dragon#Default.png differ diff --git a/src/images/creatures/Adolescent White wolf#Default.png b/src/images/creatures/Adolescent White wolf#Default.png new file mode 100644 index 0000000..f4c6da2 Binary files /dev/null and b/src/images/creatures/Adolescent White wolf#Default.png differ diff --git a/src/images/creatures/Ahrim the Blighted#Normal.png b/src/images/creatures/Ahrim the Blighted#Normal.png new file mode 100644 index 0000000..14d2ad1 Binary files /dev/null and b/src/images/creatures/Ahrim the Blighted#Normal.png differ diff --git a/src/images/creatures/Ahrim the Blighted#Rise of the Six.png b/src/images/creatures/Ahrim the Blighted#Rise of the Six.png new file mode 100644 index 0000000..9aaa6ee Binary files /dev/null and b/src/images/creatures/Ahrim the Blighted#Rise of the Six.png differ diff --git a/src/images/creatures/Ahrim the Blighted#Ritual of the Mahjarrat.png b/src/images/creatures/Ahrim the Blighted#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..14d2ad1 Binary files /dev/null and b/src/images/creatures/Ahrim the Blighted#Ritual of the Mahjarrat.png differ diff --git a/src/images/creatures/Airut#Melee.png b/src/images/creatures/Airut#Melee.png new file mode 100644 index 0000000..80d58da Binary files /dev/null and b/src/images/creatures/Airut#Melee.png differ diff --git a/src/images/creatures/Airut#Ranged.png b/src/images/creatures/Airut#Ranged.png new file mode 100644 index 0000000..fdb8d1c Binary files /dev/null and b/src/images/creatures/Airut#Ranged.png differ diff --git a/src/images/creatures/Akrisae the Doomed#Barrows.png b/src/images/creatures/Akrisae the Doomed#Barrows.png new file mode 100644 index 0000000..bb00315 Binary files /dev/null and b/src/images/creatures/Akrisae the Doomed#Barrows.png differ diff --git a/src/images/creatures/Akrisae the Doomed#Gregorovic.png b/src/images/creatures/Akrisae the Doomed#Gregorovic.png new file mode 100644 index 0000000..bb00315 Binary files /dev/null and b/src/images/creatures/Akrisae the Doomed#Gregorovic.png differ diff --git a/src/images/creatures/Akrisae the Doomed#Sliske's Endgame.png b/src/images/creatures/Akrisae the Doomed#Sliske's Endgame.png new file mode 100644 index 0000000..bb00315 Binary files /dev/null and b/src/images/creatures/Akrisae the Doomed#Sliske's Endgame.png differ diff --git a/src/images/creatures/Alanogard the Black#Default.png b/src/images/creatures/Alanogard the Black#Default.png new file mode 100644 index 0000000..eee7442 Binary files /dev/null and b/src/images/creatures/Alanogard the Black#Default.png differ diff --git a/src/images/creatures/Albino bat#Default.png b/src/images/creatures/Albino bat#Default.png new file mode 100644 index 0000000..8a25f39 Binary files /dev/null and b/src/images/creatures/Albino bat#Default.png differ diff --git a/src/images/creatures/Angry bear#A Soul's Bane.png b/src/images/creatures/Angry bear#A Soul's Bane.png new file mode 100644 index 0000000..a2d443f Binary files /dev/null and b/src/images/creatures/Angry bear#A Soul's Bane.png differ diff --git a/src/images/creatures/Angry bear#Post-quest.png b/src/images/creatures/Angry bear#Post-quest.png new file mode 100644 index 0000000..c88e9bf Binary files /dev/null and b/src/images/creatures/Angry bear#Post-quest.png differ diff --git a/src/images/creatures/Angry giant rat#A Soul's Bane.png b/src/images/creatures/Angry giant rat#A Soul's Bane.png new file mode 100644 index 0000000..3bc9d38 Binary files /dev/null and b/src/images/creatures/Angry giant rat#A Soul's Bane.png differ diff --git a/src/images/creatures/Angry giant rat#Post-quest (1).png b/src/images/creatures/Angry giant rat#Post-quest (1).png new file mode 100644 index 0000000..841acf8 Binary files /dev/null and b/src/images/creatures/Angry giant rat#Post-quest (1).png differ diff --git a/src/images/creatures/Angry giant rat#Post-quest (2).png b/src/images/creatures/Angry giant rat#Post-quest (2).png new file mode 100644 index 0000000..a97e17a Binary files /dev/null and b/src/images/creatures/Angry giant rat#Post-quest (2).png differ diff --git a/src/images/creatures/Angry goblin#A Soul's Bane.png b/src/images/creatures/Angry goblin#A Soul's Bane.png new file mode 100644 index 0000000..5ad15d0 Binary files /dev/null and b/src/images/creatures/Angry goblin#A Soul's Bane.png differ diff --git a/src/images/creatures/Angry goblin#Post-quest.png b/src/images/creatures/Angry goblin#Post-quest.png new file mode 100644 index 0000000..5ad15d0 Binary files /dev/null and b/src/images/creatures/Angry goblin#Post-quest.png differ diff --git a/src/images/creatures/Angry vampyre#Default.png b/src/images/creatures/Angry vampyre#Default.png new file mode 100644 index 0000000..7d6aca8 Binary files /dev/null and b/src/images/creatures/Angry vampyre#Default.png differ diff --git a/src/images/creatures/Animated spade#Default.png b/src/images/creatures/Animated spade#Default.png new file mode 100644 index 0000000..e99067a Binary files /dev/null and b/src/images/creatures/Animated spade#Default.png differ diff --git a/src/images/creatures/Ankou (Kili's Knowledge IV)#Default.png b/src/images/creatures/Ankou (Kili's Knowledge IV)#Default.png new file mode 100644 index 0000000..e2d5dde Binary files /dev/null and b/src/images/creatures/Ankou (Kili's Knowledge IV)#Default.png differ diff --git a/src/images/creatures/Ankou (elite)#Default.png b/src/images/creatures/Ankou (elite)#Default.png new file mode 100644 index 0000000..20ed735 Binary files /dev/null and b/src/images/creatures/Ankou (elite)#Default.png differ diff --git a/src/images/creatures/Ankou#Default.png b/src/images/creatures/Ankou#Default.png new file mode 100644 index 0000000..20ed735 Binary files /dev/null and b/src/images/creatures/Ankou#Default.png differ diff --git a/src/images/creatures/Aquanite (elite)#Default.png b/src/images/creatures/Aquanite (elite)#Default.png new file mode 100644 index 0000000..0136bcf Binary files /dev/null and b/src/images/creatures/Aquanite (elite)#Default.png differ diff --git a/src/images/creatures/Aquanite#Default.png b/src/images/creatures/Aquanite#Default.png new file mode 100644 index 0000000..0136bcf Binary files /dev/null and b/src/images/creatures/Aquanite#Default.png differ diff --git a/src/images/creatures/Araxxi#Default.png b/src/images/creatures/Araxxi#Default.png new file mode 100644 index 0000000..7ba7790 Binary files /dev/null and b/src/images/creatures/Araxxi#Default.png differ diff --git a/src/images/creatures/Arch-Glacor#Hard mode.png b/src/images/creatures/Arch-Glacor#Hard mode.png new file mode 100644 index 0000000..e7b9288 Binary files /dev/null and b/src/images/creatures/Arch-Glacor#Hard mode.png differ diff --git a/src/images/creatures/Arch-Glacor#Normal mode.png b/src/images/creatures/Arch-Glacor#Normal mode.png new file mode 100644 index 0000000..e7b9288 Binary files /dev/null and b/src/images/creatures/Arch-Glacor#Normal mode.png differ diff --git a/src/images/creatures/Armoured phantom#1.png b/src/images/creatures/Armoured phantom#1.png new file mode 100644 index 0000000..7ff8e4c Binary files /dev/null and b/src/images/creatures/Armoured phantom#1.png differ diff --git a/src/images/creatures/Armoured phantom#2.png b/src/images/creatures/Armoured phantom#2.png new file mode 100644 index 0000000..42fd163 Binary files /dev/null and b/src/images/creatures/Armoured phantom#2.png differ diff --git a/src/images/creatures/Armoured phantom#3.png b/src/images/creatures/Armoured phantom#3.png new file mode 100644 index 0000000..d5fa778 Binary files /dev/null and b/src/images/creatures/Armoured phantom#3.png differ diff --git a/src/images/creatures/Armoured zombie (The Shadow Reef)#Normal mode.png b/src/images/creatures/Armoured zombie (The Shadow Reef)#Normal mode.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/src/images/creatures/Armoured zombie (The Shadow Reef)#Normal mode.png differ diff --git a/src/images/creatures/Armoured zombie (The Shadow Reef)#Story mode.png b/src/images/creatures/Armoured zombie (The Shadow Reef)#Story mode.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/src/images/creatures/Armoured zombie (The Shadow Reef)#Story mode.png differ diff --git a/src/images/creatures/Armoured zombie (Uncharted Isles)#Aggressive.png b/src/images/creatures/Armoured zombie (Uncharted Isles)#Aggressive.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie (Uncharted Isles)#Aggressive.png differ diff --git a/src/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Sword and Shield).png b/src/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Sword and Shield).png new file mode 100644 index 0000000..b7ba172 Binary files /dev/null and b/src/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Sword and Shield).png differ diff --git a/src/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Throwing Axes).png b/src/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Throwing Axes).png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie (Uncharted Isles)#Docile (Throwing Axes).png differ diff --git a/src/images/creatures/Armoured zombie#Dimension of Disaster.png b/src/images/creatures/Armoured zombie#Dimension of Disaster.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/src/images/creatures/Armoured zombie#Dimension of Disaster.png differ diff --git a/src/images/creatures/Armoured zombie#Dishonour among Thieves.png b/src/images/creatures/Armoured zombie#Dishonour among Thieves.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie#Dishonour among Thieves.png differ diff --git a/src/images/creatures/Armoured zombie#Melee.png b/src/images/creatures/Armoured zombie#Melee.png new file mode 100644 index 0000000..b7ba172 Binary files /dev/null and b/src/images/creatures/Armoured zombie#Melee.png differ diff --git a/src/images/creatures/Armoured zombie#New Foundations.png b/src/images/creatures/Armoured zombie#New Foundations.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie#New Foundations.png differ diff --git a/src/images/creatures/Armoured zombie#One of a Kind.png b/src/images/creatures/Armoured zombie#One of a Kind.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie#One of a Kind.png differ diff --git a/src/images/creatures/Armoured zombie#Ranged.png b/src/images/creatures/Armoured zombie#Ranged.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie#Ranged.png differ diff --git a/src/images/creatures/Armoured zombie#Ritual of the Mahjarrat.png b/src/images/creatures/Armoured zombie#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..d29e25b Binary files /dev/null and b/src/images/creatures/Armoured zombie#Ritual of the Mahjarrat.png differ diff --git a/src/images/creatures/Armoured zombie#The World Wakes.png b/src/images/creatures/Armoured zombie#The World Wakes.png new file mode 100644 index 0000000..b7ba172 Binary files /dev/null and b/src/images/creatures/Armoured zombie#The World Wakes.png differ diff --git a/src/images/creatures/Astellarn#Default.png b/src/images/creatures/Astellarn#Default.png new file mode 100644 index 0000000..23c0c59 Binary files /dev/null and b/src/images/creatures/Astellarn#Default.png differ diff --git a/src/images/creatures/Automaton Generator#During The World Wakes.png b/src/images/creatures/Automaton Generator#During The World Wakes.png new file mode 100644 index 0000000..33a1e93 Binary files /dev/null and b/src/images/creatures/Automaton Generator#During The World Wakes.png differ diff --git a/src/images/creatures/Automaton Generator#Post-quest.png b/src/images/creatures/Automaton Generator#Post-quest.png new file mode 100644 index 0000000..33a1e93 Binary files /dev/null and b/src/images/creatures/Automaton Generator#Post-quest.png differ diff --git a/src/images/creatures/Automaton Guardian#During The World Wakes.png b/src/images/creatures/Automaton Guardian#During The World Wakes.png new file mode 100644 index 0000000..0768aec Binary files /dev/null and b/src/images/creatures/Automaton Guardian#During The World Wakes.png differ diff --git a/src/images/creatures/Automaton Guardian#Post-quest.png b/src/images/creatures/Automaton Guardian#Post-quest.png new file mode 100644 index 0000000..0768aec Binary files /dev/null and b/src/images/creatures/Automaton Guardian#Post-quest.png differ diff --git a/src/images/creatures/Automaton Tracer#Post-quest.png b/src/images/creatures/Automaton Tracer#Post-quest.png new file mode 100644 index 0000000..6e90799 Binary files /dev/null and b/src/images/creatures/Automaton Tracer#Post-quest.png differ diff --git a/src/images/creatures/Automaton Tracer#The World Wakes.png b/src/images/creatures/Automaton Tracer#The World Wakes.png new file mode 100644 index 0000000..6e90799 Binary files /dev/null and b/src/images/creatures/Automaton Tracer#The World Wakes.png differ diff --git a/src/images/creatures/Avaryss, the Unceasing#Challenge Mode.png b/src/images/creatures/Avaryss, the Unceasing#Challenge Mode.png new file mode 100644 index 0000000..cbccdaa Binary files /dev/null and b/src/images/creatures/Avaryss, the Unceasing#Challenge Mode.png differ diff --git a/src/images/creatures/Avaryss, the Unceasing#Daughter of Chaos.png b/src/images/creatures/Avaryss, the Unceasing#Daughter of Chaos.png new file mode 100644 index 0000000..cbccdaa Binary files /dev/null and b/src/images/creatures/Avaryss, the Unceasing#Daughter of Chaos.png differ diff --git a/src/images/creatures/Avaryss, the Unceasing#Normal Mode.png b/src/images/creatures/Avaryss, the Unceasing#Normal Mode.png new file mode 100644 index 0000000..cbccdaa Binary files /dev/null and b/src/images/creatures/Avaryss, the Unceasing#Normal Mode.png differ diff --git a/src/images/creatures/Aviansie#Melee, level 89 (1).png b/src/images/creatures/Aviansie#Melee, level 89 (1).png new file mode 100644 index 0000000..04e74bc Binary files /dev/null and b/src/images/creatures/Aviansie#Melee, level 89 (1).png differ diff --git a/src/images/creatures/Aviansie#Melee, level 89 (2).png b/src/images/creatures/Aviansie#Melee, level 89 (2).png new file mode 100644 index 0000000..04e74bc Binary files /dev/null and b/src/images/creatures/Aviansie#Melee, level 89 (2).png differ diff --git a/src/images/creatures/Aviansie#Melee, level 92.png b/src/images/creatures/Aviansie#Melee, level 92.png new file mode 100644 index 0000000..04e74bc Binary files /dev/null and b/src/images/creatures/Aviansie#Melee, level 92.png differ diff --git a/src/images/creatures/Aviansie#Ranged, level 89.png b/src/images/creatures/Aviansie#Ranged, level 89.png new file mode 100644 index 0000000..e4880e9 Binary files /dev/null and b/src/images/creatures/Aviansie#Ranged, level 89.png differ diff --git a/src/images/creatures/Aviansie#Ranged, level 92.png b/src/images/creatures/Aviansie#Ranged, level 92.png new file mode 100644 index 0000000..e4880e9 Binary files /dev/null and b/src/images/creatures/Aviansie#Ranged, level 92.png differ diff --git a/src/images/creatures/Aviansie#Ranged, level 95.png b/src/images/creatures/Aviansie#Ranged, level 95.png new file mode 100644 index 0000000..e4880e9 Binary files /dev/null and b/src/images/creatures/Aviansie#Ranged, level 95.png differ diff --git a/src/images/creatures/Baby black dragon#Default.png b/src/images/creatures/Baby black dragon#Default.png new file mode 100644 index 0000000..fec0331 Binary files /dev/null and b/src/images/creatures/Baby black dragon#Default.png differ diff --git a/src/images/creatures/Baby blue dragon#Default.png b/src/images/creatures/Baby blue dragon#Default.png new file mode 100644 index 0000000..7e7d2c0 Binary files /dev/null and b/src/images/creatures/Baby blue dragon#Default.png differ diff --git a/src/images/creatures/Baby red dragon#Default.png b/src/images/creatures/Baby red dragon#Default.png new file mode 100644 index 0000000..78fa09a Binary files /dev/null and b/src/images/creatures/Baby red dragon#Default.png differ diff --git a/src/images/creatures/Balfrug Kreeyath#Default.png b/src/images/creatures/Balfrug Kreeyath#Default.png new file mode 100644 index 0000000..7cef59f Binary files /dev/null and b/src/images/creatures/Balfrug Kreeyath#Default.png differ diff --git a/src/images/creatures/Banshee#Default.png b/src/images/creatures/Banshee#Default.png new file mode 100644 index 0000000..21a6a38 Binary files /dev/null and b/src/images/creatures/Banshee#Default.png differ diff --git a/src/images/creatures/Basilisk#Large.png b/src/images/creatures/Basilisk#Large.png new file mode 100644 index 0000000..61f7853 Binary files /dev/null and b/src/images/creatures/Basilisk#Large.png differ diff --git a/src/images/creatures/Basilisk#Small.png b/src/images/creatures/Basilisk#Small.png new file mode 100644 index 0000000..16892ae Binary files /dev/null and b/src/images/creatures/Basilisk#Small.png differ diff --git a/src/images/creatures/Bat#Default.png b/src/images/creatures/Bat#Default.png new file mode 100644 index 0000000..f230547 Binary files /dev/null and b/src/images/creatures/Bat#Default.png differ diff --git a/src/images/creatures/Bear cub#Default.png b/src/images/creatures/Bear cub#Default.png new file mode 100644 index 0000000..1044909 Binary files /dev/null and b/src/images/creatures/Bear cub#Default.png differ diff --git a/src/images/creatures/Big Wolf#Grey.png b/src/images/creatures/Big Wolf#Grey.png new file mode 100644 index 0000000..a173013 Binary files /dev/null and b/src/images/creatures/Big Wolf#Grey.png differ diff --git a/src/images/creatures/Big Wolf#White.png b/src/images/creatures/Big Wolf#White.png new file mode 100644 index 0000000..d801388 Binary files /dev/null and b/src/images/creatures/Big Wolf#White.png differ diff --git a/src/images/creatures/Big frog#Default.png b/src/images/creatures/Big frog#Default.png new file mode 100644 index 0000000..5054b8b Binary files /dev/null and b/src/images/creatures/Big frog#Default.png differ diff --git a/src/images/creatures/Bird#Black.png b/src/images/creatures/Bird#Black.png new file mode 100644 index 0000000..5cd67b5 Binary files /dev/null and b/src/images/creatures/Bird#Black.png differ diff --git a/src/images/creatures/Bird#Green.png b/src/images/creatures/Bird#Green.png new file mode 100644 index 0000000..1319269 Binary files /dev/null and b/src/images/creatures/Bird#Green.png differ diff --git a/src/images/creatures/Black bear#Default.png b/src/images/creatures/Black bear#Default.png new file mode 100644 index 0000000..19aa42b Binary files /dev/null and b/src/images/creatures/Black bear#Default.png differ diff --git a/src/images/creatures/Black demon#1.png b/src/images/creatures/Black demon#1.png new file mode 100644 index 0000000..e9c7a1e Binary files /dev/null and b/src/images/creatures/Black demon#1.png differ diff --git a/src/images/creatures/Black demon#2.png b/src/images/creatures/Black demon#2.png new file mode 100644 index 0000000..192b8ed Binary files /dev/null and b/src/images/creatures/Black demon#2.png differ diff --git a/src/images/creatures/Black demon#3.png b/src/images/creatures/Black demon#3.png new file mode 100644 index 0000000..71d95b4 Binary files /dev/null and b/src/images/creatures/Black demon#3.png differ diff --git a/src/images/creatures/Black demon#4.png b/src/images/creatures/Black demon#4.png new file mode 100644 index 0000000..b91ebcd Binary files /dev/null and b/src/images/creatures/Black demon#4.png differ diff --git a/src/images/creatures/Black demon#5.png b/src/images/creatures/Black demon#5.png new file mode 100644 index 0000000..b5c7e0a Binary files /dev/null and b/src/images/creatures/Black demon#5.png differ diff --git a/src/images/creatures/Black demon#Wilderness.png b/src/images/creatures/Black demon#Wilderness.png new file mode 100644 index 0000000..e9c7a1e Binary files /dev/null and b/src/images/creatures/Black demon#Wilderness.png differ diff --git a/src/images/creatures/Black dragon (Dragonkin Laboratory)#Default.png b/src/images/creatures/Black dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..124c86a Binary files /dev/null and b/src/images/creatures/Black dragon (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Black dragon#1.png b/src/images/creatures/Black dragon#1.png new file mode 100644 index 0000000..217e2c4 Binary files /dev/null and b/src/images/creatures/Black dragon#1.png differ diff --git a/src/images/creatures/Black dragon#2.png b/src/images/creatures/Black dragon#2.png new file mode 100644 index 0000000..0a4b7f6 Binary files /dev/null and b/src/images/creatures/Black dragon#2.png differ diff --git a/src/images/creatures/Black dragon#3.png b/src/images/creatures/Black dragon#3.png new file mode 100644 index 0000000..c9369d5 Binary files /dev/null and b/src/images/creatures/Black dragon#3.png differ diff --git a/src/images/creatures/Black dragon#4.png b/src/images/creatures/Black dragon#4.png new file mode 100644 index 0000000..e77ff0e Binary files /dev/null and b/src/images/creatures/Black dragon#4.png differ diff --git a/src/images/creatures/Black dragon#5.png b/src/images/creatures/Black dragon#5.png new file mode 100644 index 0000000..badd3b8 Binary files /dev/null and b/src/images/creatures/Black dragon#5.png differ diff --git a/src/images/creatures/Black stone dragon#Default.png b/src/images/creatures/Black stone dragon#Default.png new file mode 100644 index 0000000..0ac21da Binary files /dev/null and b/src/images/creatures/Black stone dragon#Default.png differ diff --git a/src/images/creatures/Bladed muspah#Default.png b/src/images/creatures/Bladed muspah#Default.png new file mode 100644 index 0000000..0ced7ba Binary files /dev/null and b/src/images/creatures/Bladed muspah#Default.png differ diff --git a/src/images/creatures/Blissful shadow#Default.png b/src/images/creatures/Blissful shadow#Default.png new file mode 100644 index 0000000..819801f Binary files /dev/null and b/src/images/creatures/Blissful shadow#Default.png differ diff --git a/src/images/creatures/Bloated monstrosity#Normal mode (duo).png b/src/images/creatures/Bloated monstrosity#Normal mode (duo).png new file mode 100644 index 0000000..91268b2 Binary files /dev/null and b/src/images/creatures/Bloated monstrosity#Normal mode (duo).png differ diff --git a/src/images/creatures/Bloated monstrosity#Normal mode (solo).png b/src/images/creatures/Bloated monstrosity#Normal mode (solo).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/src/images/creatures/Bloated monstrosity#Normal mode (solo).png differ diff --git a/src/images/creatures/Bloated monstrosity#Normal mode (trio).png b/src/images/creatures/Bloated monstrosity#Normal mode (trio).png new file mode 100644 index 0000000..91268b2 Binary files /dev/null and b/src/images/creatures/Bloated monstrosity#Normal mode (trio).png differ diff --git a/src/images/creatures/Bloated monstrosity#Story mode (duo).png b/src/images/creatures/Bloated monstrosity#Story mode (duo).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/src/images/creatures/Bloated monstrosity#Story mode (duo).png differ diff --git a/src/images/creatures/Bloated monstrosity#Story mode (solo).png b/src/images/creatures/Bloated monstrosity#Story mode (solo).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/src/images/creatures/Bloated monstrosity#Story mode (solo).png differ diff --git a/src/images/creatures/Bloated monstrosity#Story mode (trio).png b/src/images/creatures/Bloated monstrosity#Story mode (trio).png new file mode 100644 index 0000000..70f3184 Binary files /dev/null and b/src/images/creatures/Bloated monstrosity#Story mode (trio).png differ diff --git a/src/images/creatures/Blood nihil#boss.png b/src/images/creatures/Blood nihil#boss.png new file mode 100644 index 0000000..d4d6564 Binary files /dev/null and b/src/images/creatures/Blood nihil#boss.png differ diff --git a/src/images/creatures/Blood nihil#normal.png b/src/images/creatures/Blood nihil#normal.png new file mode 100644 index 0000000..d4d6564 Binary files /dev/null and b/src/images/creatures/Blood nihil#normal.png differ diff --git a/src/images/creatures/Bloodveld (God Wars Dungeon)#Default.png b/src/images/creatures/Bloodveld (God Wars Dungeon)#Default.png new file mode 100644 index 0000000..59f3958 Binary files /dev/null and b/src/images/creatures/Bloodveld (God Wars Dungeon)#Default.png differ diff --git a/src/images/creatures/Bloodveld (Heart of Gielinor)#Default.png b/src/images/creatures/Bloodveld (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..2eded56 Binary files /dev/null and b/src/images/creatures/Bloodveld (Heart of Gielinor)#Default.png differ diff --git a/src/images/creatures/Bloodveld#Default.png b/src/images/creatures/Bloodveld#Default.png new file mode 100644 index 0000000..59f3958 Binary files /dev/null and b/src/images/creatures/Bloodveld#Default.png differ diff --git a/src/images/creatures/Blue dragon#1.png b/src/images/creatures/Blue dragon#1.png new file mode 100644 index 0000000..302dc9c Binary files /dev/null and b/src/images/creatures/Blue dragon#1.png differ diff --git a/src/images/creatures/Blue dragon#2.png b/src/images/creatures/Blue dragon#2.png new file mode 100644 index 0000000..7805acb Binary files /dev/null and b/src/images/creatures/Blue dragon#2.png differ diff --git a/src/images/creatures/Blue dragon#3.png b/src/images/creatures/Blue dragon#3.png new file mode 100644 index 0000000..0363215 Binary files /dev/null and b/src/images/creatures/Blue dragon#3.png differ diff --git a/src/images/creatures/Blue dragon#4.png b/src/images/creatures/Blue dragon#4.png new file mode 100644 index 0000000..1eb36bd Binary files /dev/null and b/src/images/creatures/Blue dragon#4.png differ diff --git a/src/images/creatures/Blue dragon#5.png b/src/images/creatures/Blue dragon#5.png new file mode 100644 index 0000000..a39c0f2 Binary files /dev/null and b/src/images/creatures/Blue dragon#5.png differ diff --git a/src/images/creatures/Bolstered Glacyte#Default.png b/src/images/creatures/Bolstered Glacyte#Default.png new file mode 100644 index 0000000..743fbb5 Binary files /dev/null and b/src/images/creatures/Bolstered Glacyte#Default.png differ diff --git a/src/images/creatures/Bossy McBossFace#Default.png b/src/images/creatures/Bossy McBossFace#Default.png new file mode 100644 index 0000000..a3b47e1 Binary files /dev/null and b/src/images/creatures/Bossy McBossFace#Default.png differ diff --git a/src/images/creatures/Bossy McBossFace's First mate#Default.png b/src/images/creatures/Bossy McBossFace's First mate#Default.png new file mode 100644 index 0000000..85f295f Binary files /dev/null and b/src/images/creatures/Bossy McBossFace's First mate#Default.png differ diff --git a/src/images/creatures/Bound skeleton#1.png b/src/images/creatures/Bound skeleton#1.png new file mode 100644 index 0000000..991c908 Binary files /dev/null and b/src/images/creatures/Bound skeleton#1.png differ diff --git a/src/images/creatures/Bound skeleton#2.png b/src/images/creatures/Bound skeleton#2.png new file mode 100644 index 0000000..61534c9 Binary files /dev/null and b/src/images/creatures/Bound skeleton#2.png differ diff --git a/src/images/creatures/Bound skeleton#3.png b/src/images/creatures/Bound skeleton#3.png new file mode 100644 index 0000000..ac717a6 Binary files /dev/null and b/src/images/creatures/Bound skeleton#3.png differ diff --git a/src/images/creatures/Brine rat#Default.png b/src/images/creatures/Brine rat#Default.png new file mode 100644 index 0000000..5c2bc21 Binary files /dev/null and b/src/images/creatures/Brine rat#Default.png differ diff --git a/src/images/creatures/Brokeface#Default.png b/src/images/creatures/Brokeface#Default.png new file mode 100644 index 0000000..c16457d Binary files /dev/null and b/src/images/creatures/Brokeface#Default.png differ diff --git a/src/images/creatures/Bronze dragon#Default.png b/src/images/creatures/Bronze dragon#Default.png new file mode 100644 index 0000000..51bfbe7 Binary files /dev/null and b/src/images/creatures/Bronze dragon#Default.png differ diff --git a/src/images/creatures/Brutal green dragon#Default.png b/src/images/creatures/Brutal green dragon#Default.png new file mode 100644 index 0000000..1eeaeef Binary files /dev/null and b/src/images/creatures/Brutal green dragon#Default.png differ diff --git a/src/images/creatures/Brutish dinosaur#Dinosaur invasion.png b/src/images/creatures/Brutish dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..e0cbcb0 Binary files /dev/null and b/src/images/creatures/Brutish dinosaur#Dinosaur invasion.png differ diff --git a/src/images/creatures/Brutish dinosaur#Normal.png b/src/images/creatures/Brutish dinosaur#Normal.png new file mode 100644 index 0000000..e0cbcb0 Binary files /dev/null and b/src/images/creatures/Brutish dinosaur#Normal.png differ diff --git a/src/images/creatures/Bulbous crawler#Default.png b/src/images/creatures/Bulbous crawler#Default.png new file mode 100644 index 0000000..ba6fe1c Binary files /dev/null and b/src/images/creatures/Bulbous crawler#Default.png differ diff --git a/src/images/creatures/Butcher demon#Default.png b/src/images/creatures/Butcher demon#Default.png new file mode 100644 index 0000000..aa6ad13 Binary files /dev/null and b/src/images/creatures/Butcher demon#Default.png differ diff --git a/src/images/creatures/Cadarn magus#Default.png b/src/images/creatures/Cadarn magus#Default.png new file mode 100644 index 0000000..7babaab Binary files /dev/null and b/src/images/creatures/Cadarn magus#Default.png differ diff --git a/src/images/creatures/Cadarn ranger#Default.png b/src/images/creatures/Cadarn ranger#Default.png new file mode 100644 index 0000000..035050a Binary files /dev/null and b/src/images/creatures/Cadarn ranger#Default.png differ diff --git a/src/images/creatures/Camel Warrior#Default.png b/src/images/creatures/Camel Warrior#Default.png new file mode 100644 index 0000000..04dfb27 Binary files /dev/null and b/src/images/creatures/Camel Warrior#Default.png differ diff --git a/src/images/creatures/Capsarius#1.png b/src/images/creatures/Capsarius#1.png new file mode 100644 index 0000000..63d7efb Binary files /dev/null and b/src/images/creatures/Capsarius#1.png differ diff --git a/src/images/creatures/Capsarius#2.png b/src/images/creatures/Capsarius#2.png new file mode 100644 index 0000000..3d92b21 Binary files /dev/null and b/src/images/creatures/Capsarius#2.png differ diff --git a/src/images/creatures/Catablepon#Default.png b/src/images/creatures/Catablepon#Default.png new file mode 100644 index 0000000..73b5d0a Binary files /dev/null and b/src/images/creatures/Catablepon#Default.png differ diff --git a/src/images/creatures/Cave bug#Level 11.png b/src/images/creatures/Cave bug#Level 11.png new file mode 100644 index 0000000..c1a2270 Binary files /dev/null and b/src/images/creatures/Cave bug#Level 11.png differ diff --git a/src/images/creatures/Cave bug#Level 6.png b/src/images/creatures/Cave bug#Level 6.png new file mode 100644 index 0000000..870a095 Binary files /dev/null and b/src/images/creatures/Cave bug#Level 6.png differ diff --git a/src/images/creatures/Cave crawler#Level 24.png b/src/images/creatures/Cave crawler#Level 24.png new file mode 100644 index 0000000..8d90fdb Binary files /dev/null and b/src/images/creatures/Cave crawler#Level 24.png differ diff --git a/src/images/creatures/Cave crawler#Level 59.png b/src/images/creatures/Cave crawler#Level 59.png new file mode 100644 index 0000000..8d90fdb Binary files /dev/null and b/src/images/creatures/Cave crawler#Level 59.png differ diff --git a/src/images/creatures/Cave goblin (monster)#Default.png b/src/images/creatures/Cave goblin (monster)#Default.png new file mode 100644 index 0000000..8e4ad17 Binary files /dev/null and b/src/images/creatures/Cave goblin (monster)#Default.png differ diff --git a/src/images/creatures/Cave goblin guard#Club.png b/src/images/creatures/Cave goblin guard#Club.png new file mode 100644 index 0000000..c24a58c Binary files /dev/null and b/src/images/creatures/Cave goblin guard#Club.png differ diff --git a/src/images/creatures/Cave goblin guard#Spear.png b/src/images/creatures/Cave goblin guard#Spear.png new file mode 100644 index 0000000..c50838b Binary files /dev/null and b/src/images/creatures/Cave goblin guard#Spear.png differ diff --git a/src/images/creatures/Cave goblin miner#Mining.png b/src/images/creatures/Cave goblin miner#Mining.png new file mode 100644 index 0000000..659fa9d Binary files /dev/null and b/src/images/creatures/Cave goblin miner#Mining.png differ diff --git a/src/images/creatures/Cave goblin miner#Slacking off.png b/src/images/creatures/Cave goblin miner#Slacking off.png new file mode 100644 index 0000000..659fa9d Binary files /dev/null and b/src/images/creatures/Cave goblin miner#Slacking off.png differ diff --git a/src/images/creatures/Cave horror (elite)#Default.png b/src/images/creatures/Cave horror (elite)#Default.png new file mode 100644 index 0000000..1efc58d Binary files /dev/null and b/src/images/creatures/Cave horror (elite)#Default.png differ diff --git a/src/images/creatures/Cave horror#Default.png b/src/images/creatures/Cave horror#Default.png new file mode 100644 index 0000000..1efc58d Binary files /dev/null and b/src/images/creatures/Cave horror#Default.png differ diff --git a/src/images/creatures/Cave slime#Default.png b/src/images/creatures/Cave slime#Default.png new file mode 100644 index 0000000..20b81b5 Binary files /dev/null and b/src/images/creatures/Cave slime#Default.png differ diff --git a/src/images/creatures/Celestial dragon (Dragonkin Laboratory)#Default.png b/src/images/creatures/Celestial dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..b041820 Binary files /dev/null and b/src/images/creatures/Celestial dragon (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Celestial dragon#Default.png b/src/images/creatures/Celestial dragon#Default.png new file mode 100644 index 0000000..b041820 Binary files /dev/null and b/src/images/creatures/Celestial dragon#Default.png differ diff --git a/src/images/creatures/Cerberus Juvenile#Default.png b/src/images/creatures/Cerberus Juvenile#Default.png new file mode 100644 index 0000000..c48827c Binary files /dev/null and b/src/images/creatures/Cerberus Juvenile#Default.png differ diff --git a/src/images/creatures/Champion of Infernus#Default.png b/src/images/creatures/Champion of Infernus#Default.png new file mode 100644 index 0000000..45ced27 Binary files /dev/null and b/src/images/creatures/Champion of Infernus#Default.png differ diff --git a/src/images/creatures/Chaos Demon Savage#Default.png b/src/images/creatures/Chaos Demon Savage#Default.png new file mode 100644 index 0000000..edb72bf Binary files /dev/null and b/src/images/creatures/Chaos Demon Savage#Default.png differ diff --git a/src/images/creatures/Chaos Demon#Default.png b/src/images/creatures/Chaos Demon#Default.png new file mode 100644 index 0000000..edb72bf Binary files /dev/null and b/src/images/creatures/Chaos Demon#Default.png differ diff --git a/src/images/creatures/Chaos Elemental#F2P.png b/src/images/creatures/Chaos Elemental#F2P.png new file mode 100644 index 0000000..4cddb5e Binary files /dev/null and b/src/images/creatures/Chaos Elemental#F2P.png differ diff --git a/src/images/creatures/Chaos Elemental#P2P.png b/src/images/creatures/Chaos Elemental#P2P.png new file mode 100644 index 0000000..4cddb5e Binary files /dev/null and b/src/images/creatures/Chaos Elemental#P2P.png differ diff --git a/src/images/creatures/Chaos Giant#Default.png b/src/images/creatures/Chaos Giant#Default.png new file mode 100644 index 0000000..e692ba9 Binary files /dev/null and b/src/images/creatures/Chaos Giant#Default.png differ diff --git a/src/images/creatures/Chicken#Brown.png b/src/images/creatures/Chicken#Brown.png new file mode 100644 index 0000000..ce91d61 Binary files /dev/null and b/src/images/creatures/Chicken#Brown.png differ diff --git a/src/images/creatures/Chicken#White.png b/src/images/creatures/Chicken#White.png new file mode 100644 index 0000000..596ee13 Binary files /dev/null and b/src/images/creatures/Chicken#White.png differ diff --git a/src/images/creatures/Chompy bird#Default.png b/src/images/creatures/Chompy bird#Default.png new file mode 100644 index 0000000..efda171 Binary files /dev/null and b/src/images/creatures/Chompy bird#Default.png differ diff --git a/src/images/creatures/Cockatrice#Default.png b/src/images/creatures/Cockatrice#Default.png new file mode 100644 index 0000000..5598515 Binary files /dev/null and b/src/images/creatures/Cockatrice#Default.png differ diff --git a/src/images/creatures/Cockroach drone#Default.png b/src/images/creatures/Cockroach drone#Default.png new file mode 100644 index 0000000..3e56461 Binary files /dev/null and b/src/images/creatures/Cockroach drone#Default.png differ diff --git a/src/images/creatures/Cockroach soldier#Default.png b/src/images/creatures/Cockroach soldier#Default.png new file mode 100644 index 0000000..3bd1063 Binary files /dev/null and b/src/images/creatures/Cockroach soldier#Default.png differ diff --git a/src/images/creatures/Cockroach worker#Default.png b/src/images/creatures/Cockroach worker#Default.png new file mode 100644 index 0000000..c44edc6 Binary files /dev/null and b/src/images/creatures/Cockroach worker#Default.png differ diff --git a/src/images/creatures/Commander Zilyana#Aftermath.png b/src/images/creatures/Commander Zilyana#Aftermath.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Aftermath.png differ diff --git a/src/images/creatures/Commander Zilyana#Battle of the Monolith.png b/src/images/creatures/Commander Zilyana#Battle of the Monolith.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Battle of the Monolith.png differ diff --git a/src/images/creatures/Commander Zilyana#Council of Burthorpe.png b/src/images/creatures/Commander Zilyana#Council of Burthorpe.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Council of Burthorpe.png differ diff --git a/src/images/creatures/Commander Zilyana#Extinction.png b/src/images/creatures/Commander Zilyana#Extinction.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Extinction.png differ diff --git a/src/images/creatures/Commander Zilyana#Gower Quest.png b/src/images/creatures/Commander Zilyana#Gower Quest.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Gower Quest.png differ diff --git a/src/images/creatures/Commander Zilyana#Missing, Presumed Death.png b/src/images/creatures/Commander Zilyana#Missing, Presumed Death.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Missing, Presumed Death.png differ diff --git a/src/images/creatures/Commander Zilyana#Once Upon a Time in Gielinor.png b/src/images/creatures/Commander Zilyana#Once Upon a Time in Gielinor.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Once Upon a Time in Gielinor.png differ diff --git a/src/images/creatures/Commander Zilyana#Ritual of the Mahjarrat.png b/src/images/creatures/Commander Zilyana#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Ritual of the Mahjarrat.png differ diff --git a/src/images/creatures/Commander Zilyana#Senntisten.png b/src/images/creatures/Commander Zilyana#Senntisten.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#Senntisten.png differ diff --git a/src/images/creatures/Commander Zilyana#The World Wakes.png b/src/images/creatures/Commander Zilyana#The World Wakes.png new file mode 100644 index 0000000..6663dc6 Binary files /dev/null and b/src/images/creatures/Commander Zilyana#The World Wakes.png differ diff --git a/src/images/creatures/Corporeal Beast#Default.png b/src/images/creatures/Corporeal Beast#Default.png new file mode 100644 index 0000000..dc29bae Binary files /dev/null and b/src/images/creatures/Corporeal Beast#Default.png differ diff --git a/src/images/creatures/Corpse archer#Default.png b/src/images/creatures/Corpse archer#Default.png new file mode 100644 index 0000000..72c57a1 Binary files /dev/null and b/src/images/creatures/Corpse archer#Default.png differ diff --git a/src/images/creatures/Corpse carrier#Normal mode (duo).png b/src/images/creatures/Corpse carrier#Normal mode (duo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/src/images/creatures/Corpse carrier#Normal mode (duo).png differ diff --git a/src/images/creatures/Corpse carrier#Normal mode (solo).png b/src/images/creatures/Corpse carrier#Normal mode (solo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/src/images/creatures/Corpse carrier#Normal mode (solo).png differ diff --git a/src/images/creatures/Corpse carrier#Normal mode (trio).png b/src/images/creatures/Corpse carrier#Normal mode (trio).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/src/images/creatures/Corpse carrier#Normal mode (trio).png differ diff --git a/src/images/creatures/Corpse carrier#Story mode (duo).png b/src/images/creatures/Corpse carrier#Story mode (duo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/src/images/creatures/Corpse carrier#Story mode (duo).png differ diff --git a/src/images/creatures/Corpse carrier#Story mode (solo).png b/src/images/creatures/Corpse carrier#Story mode (solo).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/src/images/creatures/Corpse carrier#Story mode (solo).png differ diff --git a/src/images/creatures/Corpse carrier#Story mode (trio).png b/src/images/creatures/Corpse carrier#Story mode (trio).png new file mode 100644 index 0000000..4afe98c Binary files /dev/null and b/src/images/creatures/Corpse carrier#Story mode (trio).png differ diff --git a/src/images/creatures/Corpse mage#Default.png b/src/images/creatures/Corpse mage#Default.png new file mode 100644 index 0000000..a3294fd Binary files /dev/null and b/src/images/creatures/Corpse mage#Default.png differ diff --git a/src/images/creatures/Corpse spider#Default.png b/src/images/creatures/Corpse spider#Default.png new file mode 100644 index 0000000..12f9a63 Binary files /dev/null and b/src/images/creatures/Corpse spider#Default.png differ diff --git a/src/images/creatures/Corrupted dust devil#Default.png b/src/images/creatures/Corrupted dust devil#Default.png new file mode 100644 index 0000000..42f13c6 Binary files /dev/null and b/src/images/creatures/Corrupted dust devil#Default.png differ diff --git a/src/images/creatures/Corrupted kalphite guardian#Default.png b/src/images/creatures/Corrupted kalphite guardian#Default.png new file mode 100644 index 0000000..1d20599 Binary files /dev/null and b/src/images/creatures/Corrupted kalphite guardian#Default.png differ diff --git a/src/images/creatures/Corrupted kalphite marauder#Default.png b/src/images/creatures/Corrupted kalphite marauder#Default.png new file mode 100644 index 0000000..1fa140c Binary files /dev/null and b/src/images/creatures/Corrupted kalphite marauder#Default.png differ diff --git a/src/images/creatures/Corrupted lizard#Default.png b/src/images/creatures/Corrupted lizard#Default.png new file mode 100644 index 0000000..48caa1c Binary files /dev/null and b/src/images/creatures/Corrupted lizard#Default.png differ diff --git a/src/images/creatures/Corrupted scarab#Default.png b/src/images/creatures/Corrupted scarab#Default.png new file mode 100644 index 0000000..0045413 Binary files /dev/null and b/src/images/creatures/Corrupted scarab#Default.png differ diff --git a/src/images/creatures/Corrupted scorpion#Default.png b/src/images/creatures/Corrupted scorpion#Default.png new file mode 100644 index 0000000..060bb10 Binary files /dev/null and b/src/images/creatures/Corrupted scorpion#Default.png differ diff --git a/src/images/creatures/Corrupted worker#Default.png b/src/images/creatures/Corrupted worker#Default.png new file mode 100644 index 0000000..27d1885 Binary files /dev/null and b/src/images/creatures/Corrupted worker#Default.png differ diff --git a/src/images/creatures/Cow calf#Default.png b/src/images/creatures/Cow calf#Default.png new file mode 100644 index 0000000..37e816f Binary files /dev/null and b/src/images/creatures/Cow calf#Default.png differ diff --git a/src/images/creatures/Cow#Standard (1).png b/src/images/creatures/Cow#Standard (1).png new file mode 100644 index 0000000..f22a631 Binary files /dev/null and b/src/images/creatures/Cow#Standard (1).png differ diff --git a/src/images/creatures/Cow#Standard (2).png b/src/images/creatures/Cow#Standard (2).png new file mode 100644 index 0000000..d7c1d2b Binary files /dev/null and b/src/images/creatures/Cow#Standard (2).png differ diff --git a/src/images/creatures/Cow#Standard (3).png b/src/images/creatures/Cow#Standard (3).png new file mode 100644 index 0000000..56dbbe4 Binary files /dev/null and b/src/images/creatures/Cow#Standard (3).png differ diff --git a/src/images/creatures/Cow#Zanaris.png b/src/images/creatures/Cow#Zanaris.png new file mode 100644 index 0000000..fc80aaa Binary files /dev/null and b/src/images/creatures/Cow#Zanaris.png differ diff --git a/src/images/creatures/Crawling corpse torso#Default.png b/src/images/creatures/Crawling corpse torso#Default.png new file mode 100644 index 0000000..f87ac28 Binary files /dev/null and b/src/images/creatures/Crawling corpse torso#Default.png differ diff --git a/src/images/creatures/Crawling hand#10a.png b/src/images/creatures/Crawling hand#10a.png new file mode 100644 index 0000000..3931804 Binary files /dev/null and b/src/images/creatures/Crawling hand#10a.png differ diff --git a/src/images/creatures/Crawling hand#10b.png b/src/images/creatures/Crawling hand#10b.png new file mode 100644 index 0000000..addcd75 Binary files /dev/null and b/src/images/creatures/Crawling hand#10b.png differ diff --git a/src/images/creatures/Crawling hand#10c.png b/src/images/creatures/Crawling hand#10c.png new file mode 100644 index 0000000..49f283b Binary files /dev/null and b/src/images/creatures/Crawling hand#10c.png differ diff --git a/src/images/creatures/Crawling hand#10d.png b/src/images/creatures/Crawling hand#10d.png new file mode 100644 index 0000000..3918bf2 Binary files /dev/null and b/src/images/creatures/Crawling hand#10d.png differ diff --git a/src/images/creatures/Crawling hand#10e.png b/src/images/creatures/Crawling hand#10e.png new file mode 100644 index 0000000..38a1387 Binary files /dev/null and b/src/images/creatures/Crawling hand#10e.png differ diff --git a/src/images/creatures/Crawling hand#6a.png b/src/images/creatures/Crawling hand#6a.png new file mode 100644 index 0000000..1437b35 Binary files /dev/null and b/src/images/creatures/Crawling hand#6a.png differ diff --git a/src/images/creatures/Crawling hand#6b.png b/src/images/creatures/Crawling hand#6b.png new file mode 100644 index 0000000..90378ff Binary files /dev/null and b/src/images/creatures/Crawling hand#6b.png differ diff --git a/src/images/creatures/Crawling hand#6c.png b/src/images/creatures/Crawling hand#6c.png new file mode 100644 index 0000000..9a57966 Binary files /dev/null and b/src/images/creatures/Crawling hand#6c.png differ diff --git a/src/images/creatures/Crawling hand#6d.png b/src/images/creatures/Crawling hand#6d.png new file mode 100644 index 0000000..f3c2774 Binary files /dev/null and b/src/images/creatures/Crawling hand#6d.png differ diff --git a/src/images/creatures/Crawling hand#6e.png b/src/images/creatures/Crawling hand#6e.png new file mode 100644 index 0000000..3fcadc0 Binary files /dev/null and b/src/images/creatures/Crawling hand#6e.png differ diff --git a/src/images/creatures/Crocodile akh#Default.png b/src/images/creatures/Crocodile akh#Default.png new file mode 100644 index 0000000..0933273 Binary files /dev/null and b/src/images/creatures/Crocodile akh#Default.png differ diff --git a/src/images/creatures/Crocodile#40.png b/src/images/creatures/Crocodile#40.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/src/images/creatures/Crocodile#40.png differ diff --git a/src/images/creatures/Crocodile#77.png b/src/images/creatures/Crocodile#77.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/src/images/creatures/Crocodile#77.png differ diff --git a/src/images/creatures/Croesus#Active.png b/src/images/creatures/Croesus#Active.png new file mode 100644 index 0000000..620b559 Binary files /dev/null and b/src/images/creatures/Croesus#Active.png differ diff --git a/src/images/creatures/Croesus#Dormant.png b/src/images/creatures/Croesus#Dormant.png new file mode 100644 index 0000000..3285962 Binary files /dev/null and b/src/images/creatures/Croesus#Dormant.png differ diff --git a/src/images/creatures/Crypt rat#Default.png b/src/images/creatures/Crypt rat#Default.png new file mode 100644 index 0000000..e2da29f Binary files /dev/null and b/src/images/creatures/Crypt rat#Default.png differ diff --git a/src/images/creatures/Crypt spider#Default.png b/src/images/creatures/Crypt spider#Default.png new file mode 100644 index 0000000..cfa2ec6 Binary files /dev/null and b/src/images/creatures/Crypt spider#Default.png differ diff --git a/src/images/creatures/Crystal Shapeshifter#Magic.png b/src/images/creatures/Crystal Shapeshifter#Magic.png new file mode 100644 index 0000000..b20e768 Binary files /dev/null and b/src/images/creatures/Crystal Shapeshifter#Magic.png differ diff --git a/src/images/creatures/Crystal Shapeshifter#Melee.png b/src/images/creatures/Crystal Shapeshifter#Melee.png new file mode 100644 index 0000000..848114b Binary files /dev/null and b/src/images/creatures/Crystal Shapeshifter#Melee.png differ diff --git a/src/images/creatures/Crystal Shapeshifter#Ranged.png b/src/images/creatures/Crystal Shapeshifter#Ranged.png new file mode 100644 index 0000000..4f35543 Binary files /dev/null and b/src/images/creatures/Crystal Shapeshifter#Ranged.png differ diff --git a/src/images/creatures/Cyclops#57 (Crush).png b/src/images/creatures/Cyclops#57 (Crush).png new file mode 100644 index 0000000..9da10e1 Binary files /dev/null and b/src/images/creatures/Cyclops#57 (Crush).png differ diff --git a/src/images/creatures/Cyclops#57 (Slash).png b/src/images/creatures/Cyclops#57 (Slash).png new file mode 100644 index 0000000..c36e469 Binary files /dev/null and b/src/images/creatures/Cyclops#57 (Slash).png differ diff --git a/src/images/creatures/Cyclops#57 (Stab).png b/src/images/creatures/Cyclops#57 (Stab).png new file mode 100644 index 0000000..f7b9a10 Binary files /dev/null and b/src/images/creatures/Cyclops#57 (Stab).png differ diff --git a/src/images/creatures/Cyclops#68 (Crush).png b/src/images/creatures/Cyclops#68 (Crush).png new file mode 100644 index 0000000..0b7a15c Binary files /dev/null and b/src/images/creatures/Cyclops#68 (Crush).png differ diff --git a/src/images/creatures/Cyclops#68 (Slash).png b/src/images/creatures/Cyclops#68 (Slash).png new file mode 100644 index 0000000..2a2d250 Binary files /dev/null and b/src/images/creatures/Cyclops#68 (Slash).png differ diff --git a/src/images/creatures/Cyclops#68 (Stab).png b/src/images/creatures/Cyclops#68 (Stab).png new file mode 100644 index 0000000..4472898 Binary files /dev/null and b/src/images/creatures/Cyclops#68 (Stab).png differ diff --git a/src/images/creatures/Cyclops#91 (God Wars Dungeon), 1.png b/src/images/creatures/Cyclops#91 (God Wars Dungeon), 1.png new file mode 100644 index 0000000..bdd7480 Binary files /dev/null and b/src/images/creatures/Cyclops#91 (God Wars Dungeon), 1.png differ diff --git a/src/images/creatures/Cyclops#91 (God Wars Dungeon), 2.png b/src/images/creatures/Cyclops#91 (God Wars Dungeon), 2.png new file mode 100644 index 0000000..4799e36 Binary files /dev/null and b/src/images/creatures/Cyclops#91 (God Wars Dungeon), 2.png differ diff --git a/src/images/creatures/Cyclossus#Default.png b/src/images/creatures/Cyclossus#Default.png new file mode 100644 index 0000000..dbb51f0 Binary files /dev/null and b/src/images/creatures/Cyclossus#Default.png differ diff --git a/src/images/creatures/Dagannoth (Lighthouse)#Level 77.png b/src/images/creatures/Dagannoth (Lighthouse)#Level 77.png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/src/images/creatures/Dagannoth (Lighthouse)#Level 77.png differ diff --git a/src/images/creatures/Dagannoth (Lighthouse)#Level 78.png b/src/images/creatures/Dagannoth (Lighthouse)#Level 78.png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/src/images/creatures/Dagannoth (Lighthouse)#Level 78.png differ diff --git a/src/images/creatures/Dagannoth (Waterbirth Island)#Blood Runs Deep (78).png b/src/images/creatures/Dagannoth (Waterbirth Island)#Blood Runs Deep (78).png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/src/images/creatures/Dagannoth (Waterbirth Island)#Blood Runs Deep (78).png differ diff --git a/src/images/creatures/Dagannoth (Waterbirth Island)#Melee (78).png b/src/images/creatures/Dagannoth (Waterbirth Island)#Melee (78).png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/src/images/creatures/Dagannoth (Waterbirth Island)#Melee (78).png differ diff --git a/src/images/creatures/Dagannoth (Waterbirth Island)#Melee (79).png b/src/images/creatures/Dagannoth (Waterbirth Island)#Melee (79).png new file mode 100644 index 0000000..a699f48 Binary files /dev/null and b/src/images/creatures/Dagannoth (Waterbirth Island)#Melee (79).png differ diff --git a/src/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (78).png b/src/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (78).png new file mode 100644 index 0000000..d5b55dc Binary files /dev/null and b/src/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (78).png differ diff --git a/src/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (79).png b/src/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (79).png new file mode 100644 index 0000000..d5b55dc Binary files /dev/null and b/src/images/creatures/Dagannoth (Waterbirth Island, ranged)#Ranged (79).png differ diff --git a/src/images/creatures/Dagannoth Prime#Default.png b/src/images/creatures/Dagannoth Prime#Default.png new file mode 100644 index 0000000..4c1cc9a Binary files /dev/null and b/src/images/creatures/Dagannoth Prime#Default.png differ diff --git a/src/images/creatures/Dagannoth Rex#Default.png b/src/images/creatures/Dagannoth Rex#Default.png new file mode 100644 index 0000000..f8b6d6d Binary files /dev/null and b/src/images/creatures/Dagannoth Rex#Default.png differ diff --git a/src/images/creatures/Dagannoth Supreme#Default.png b/src/images/creatures/Dagannoth Supreme#Default.png new file mode 100644 index 0000000..5dec8b4 Binary files /dev/null and b/src/images/creatures/Dagannoth Supreme#Default.png differ diff --git a/src/images/creatures/Dagannoth fledgeling#Default.png b/src/images/creatures/Dagannoth fledgeling#Default.png new file mode 100644 index 0000000..93ae190 Binary files /dev/null and b/src/images/creatures/Dagannoth fledgeling#Default.png differ diff --git a/src/images/creatures/Dagannoth guardian#Default.png b/src/images/creatures/Dagannoth guardian#Default.png new file mode 100644 index 0000000..3d657be Binary files /dev/null and b/src/images/creatures/Dagannoth guardian#Default.png differ diff --git a/src/images/creatures/Dagannoth spawn#Default.png b/src/images/creatures/Dagannoth spawn#Default.png new file mode 100644 index 0000000..13af6b7 Binary files /dev/null and b/src/images/creatures/Dagannoth spawn#Default.png differ diff --git a/src/images/creatures/Dark beast (elite)#Default.png b/src/images/creatures/Dark beast (elite)#Default.png new file mode 100644 index 0000000..a2ec825 Binary files /dev/null and b/src/images/creatures/Dark beast (elite)#Default.png differ diff --git a/src/images/creatures/Dark beast#19,000 life points.png b/src/images/creatures/Dark beast#19,000 life points.png new file mode 100644 index 0000000..a2ec825 Binary files /dev/null and b/src/images/creatures/Dark beast#19,000 life points.png differ diff --git a/src/images/creatures/Dark beast#8,500 life points.png b/src/images/creatures/Dark beast#8,500 life points.png new file mode 100644 index 0000000..a2ec825 Binary files /dev/null and b/src/images/creatures/Dark beast#8,500 life points.png differ diff --git a/src/images/creatures/Deadly red spider#Default.png b/src/images/creatures/Deadly red spider#Default.png new file mode 100644 index 0000000..2ea4125 Binary files /dev/null and b/src/images/creatures/Deadly red spider#Default.png differ diff --git a/src/images/creatures/Denizen of Infernus#Default.png b/src/images/creatures/Denizen of Infernus#Default.png new file mode 100644 index 0000000..edb72bf Binary files /dev/null and b/src/images/creatures/Denizen of Infernus#Default.png differ diff --git a/src/images/creatures/Desert Lizard#Brown.png b/src/images/creatures/Desert Lizard#Brown.png new file mode 100644 index 0000000..e770413 Binary files /dev/null and b/src/images/creatures/Desert Lizard#Brown.png differ diff --git a/src/images/creatures/Desert Lizard#Green.png b/src/images/creatures/Desert Lizard#Green.png new file mode 100644 index 0000000..bfdd4d7 Binary files /dev/null and b/src/images/creatures/Desert Lizard#Green.png differ diff --git a/src/images/creatures/Desert Lizard#Yellow.png b/src/images/creatures/Desert Lizard#Yellow.png new file mode 100644 index 0000000..6c23a72 Binary files /dev/null and b/src/images/creatures/Desert Lizard#Yellow.png differ diff --git a/src/images/creatures/Desert strykewyrm#Default.png b/src/images/creatures/Desert strykewyrm#Default.png new file mode 100644 index 0000000..dccc2e3 Binary files /dev/null and b/src/images/creatures/Desert strykewyrm#Default.png differ diff --git a/src/images/creatures/Desert wolf#Brown.png b/src/images/creatures/Desert wolf#Brown.png new file mode 100644 index 0000000..9599b1e Binary files /dev/null and b/src/images/creatures/Desert wolf#Brown.png differ diff --git a/src/images/creatures/Desert wolf#Grey.png b/src/images/creatures/Desert wolf#Grey.png new file mode 100644 index 0000000..64f0d7b Binary files /dev/null and b/src/images/creatures/Desert wolf#Grey.png differ diff --git a/src/images/creatures/Devil's snare#Default.png b/src/images/creatures/Devil's snare#Default.png new file mode 100644 index 0000000..241b62e Binary files /dev/null and b/src/images/creatures/Devil's snare#Default.png differ diff --git a/src/images/creatures/Dharok the Wretched#Normal.png b/src/images/creatures/Dharok the Wretched#Normal.png new file mode 100644 index 0000000..4f17a4c Binary files /dev/null and b/src/images/creatures/Dharok the Wretched#Normal.png differ diff --git a/src/images/creatures/Dharok the Wretched#Rise of the Six.png b/src/images/creatures/Dharok the Wretched#Rise of the Six.png new file mode 100644 index 0000000..d97e246 Binary files /dev/null and b/src/images/creatures/Dharok the Wretched#Rise of the Six.png differ diff --git a/src/images/creatures/Dharok the Wretched#Ritual of the Mahjarrat.png b/src/images/creatures/Dharok the Wretched#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..4f17a4c Binary files /dev/null and b/src/images/creatures/Dharok the Wretched#Ritual of the Mahjarrat.png differ diff --git a/src/images/creatures/Dire Wolf#Default.png b/src/images/creatures/Dire Wolf#Default.png new file mode 100644 index 0000000..7a2f31c Binary files /dev/null and b/src/images/creatures/Dire Wolf#Default.png differ diff --git a/src/images/creatures/Dragith Nurn#Default.png b/src/images/creatures/Dragith Nurn#Default.png new file mode 100644 index 0000000..102f87c Binary files /dev/null and b/src/images/creatures/Dragith Nurn#Default.png differ diff --git a/src/images/creatures/Dragonstone dragon (Dragonkin Laboratory)#Default.png b/src/images/creatures/Dragonstone dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..0bc39e7 Binary files /dev/null and b/src/images/creatures/Dragonstone dragon (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Dragonstone dragon#Default.png b/src/images/creatures/Dragonstone dragon#Default.png new file mode 100644 index 0000000..9573a4d Binary files /dev/null and b/src/images/creatures/Dragonstone dragon#Default.png differ diff --git a/src/images/creatures/Dried zombie#Dried.png b/src/images/creatures/Dried zombie#Dried.png new file mode 100644 index 0000000..70d964d Binary files /dev/null and b/src/images/creatures/Dried zombie#Dried.png differ diff --git a/src/images/creatures/Dried zombie#Parched.png b/src/images/creatures/Dried zombie#Parched.png new file mode 100644 index 0000000..3658e09 Binary files /dev/null and b/src/images/creatures/Dried zombie#Parched.png differ diff --git a/src/images/creatures/Dried zombie#Unmoisturised.png b/src/images/creatures/Dried zombie#Unmoisturised.png new file mode 100644 index 0000000..1538c18 Binary files /dev/null and b/src/images/creatures/Dried zombie#Unmoisturised.png differ diff --git a/src/images/creatures/Duck#Female.png b/src/images/creatures/Duck#Female.png new file mode 100644 index 0000000..0efe33f Binary files /dev/null and b/src/images/creatures/Duck#Female.png differ diff --git a/src/images/creatures/Duck#Land.png b/src/images/creatures/Duck#Land.png new file mode 100644 index 0000000..a42c11d Binary files /dev/null and b/src/images/creatures/Duck#Land.png differ diff --git a/src/images/creatures/Duck#Male.png b/src/images/creatures/Duck#Male.png new file mode 100644 index 0000000..c39e51e Binary files /dev/null and b/src/images/creatures/Duck#Male.png differ diff --git a/src/images/creatures/Duckling#Default.png b/src/images/creatures/Duckling#Default.png new file mode 100644 index 0000000..24f76de Binary files /dev/null and b/src/images/creatures/Duckling#Default.png differ diff --git a/src/images/creatures/Dungeon rat#Level 11 (1).png b/src/images/creatures/Dungeon rat#Level 11 (1).png new file mode 100644 index 0000000..c076261 Binary files /dev/null and b/src/images/creatures/Dungeon rat#Level 11 (1).png differ diff --git a/src/images/creatures/Dungeon rat#Level 11 (2).png b/src/images/creatures/Dungeon rat#Level 11 (2).png new file mode 100644 index 0000000..ef8193f Binary files /dev/null and b/src/images/creatures/Dungeon rat#Level 11 (2).png differ diff --git a/src/images/creatures/Dungeon rat#Level 11 (3).png b/src/images/creatures/Dungeon rat#Level 11 (3).png new file mode 100644 index 0000000..355894b Binary files /dev/null and b/src/images/creatures/Dungeon rat#Level 11 (3).png differ diff --git a/src/images/creatures/Dungeon rat#Level 18 (brown).png b/src/images/creatures/Dungeon rat#Level 18 (brown).png new file mode 100644 index 0000000..660d10a Binary files /dev/null and b/src/images/creatures/Dungeon rat#Level 18 (brown).png differ diff --git a/src/images/creatures/Dungeon rat#Level 18 (brown, arrows).png b/src/images/creatures/Dungeon rat#Level 18 (brown, arrows).png new file mode 100644 index 0000000..67c5fd3 Binary files /dev/null and b/src/images/creatures/Dungeon rat#Level 18 (brown, arrows).png differ diff --git a/src/images/creatures/Dungeon rat#Level 18 (grey).png b/src/images/creatures/Dungeon rat#Level 18 (grey).png new file mode 100644 index 0000000..fb36c35 Binary files /dev/null and b/src/images/creatures/Dungeon rat#Level 18 (grey).png differ diff --git a/src/images/creatures/Dust devil (elite)#Default.png b/src/images/creatures/Dust devil (elite)#Default.png new file mode 100644 index 0000000..1c3590f Binary files /dev/null and b/src/images/creatures/Dust devil (elite)#Default.png differ diff --git a/src/images/creatures/Dust devil#Default.png b/src/images/creatures/Dust devil#Default.png new file mode 100644 index 0000000..1c3590f Binary files /dev/null and b/src/images/creatures/Dust devil#Default.png differ diff --git a/src/images/creatures/Earth warrior (elite)#Default.png b/src/images/creatures/Earth warrior (elite)#Default.png new file mode 100644 index 0000000..be7d624 Binary files /dev/null and b/src/images/creatures/Earth warrior (elite)#Default.png differ diff --git a/src/images/creatures/Earth warrior#Default.png b/src/images/creatures/Earth warrior#Default.png new file mode 100644 index 0000000..be7d624 Binary files /dev/null and b/src/images/creatures/Earth warrior#Default.png differ diff --git a/src/images/creatures/Edimmu (elite)#Default.png b/src/images/creatures/Edimmu (elite)#Default.png new file mode 100644 index 0000000..507aa45 Binary files /dev/null and b/src/images/creatures/Edimmu (elite)#Default.png differ diff --git a/src/images/creatures/Edimmu#Default.png b/src/images/creatures/Edimmu#Default.png new file mode 100644 index 0000000..8d64ccb Binary files /dev/null and b/src/images/creatures/Edimmu#Default.png differ diff --git a/src/images/creatures/Elegorn the Celestial#Default.png b/src/images/creatures/Elegorn the Celestial#Default.png new file mode 100644 index 0000000..a18c825 Binary files /dev/null and b/src/images/creatures/Elegorn the Celestial#Default.png differ diff --git a/src/images/creatures/Elf warrior#Melee.png b/src/images/creatures/Elf warrior#Melee.png new file mode 100644 index 0000000..9e0ea4a Binary files /dev/null and b/src/images/creatures/Elf warrior#Melee.png differ diff --git a/src/images/creatures/Elf warrior#Range.png b/src/images/creatures/Elf warrior#Range.png new file mode 100644 index 0000000..a9a6356 Binary files /dev/null and b/src/images/creatures/Elf warrior#Range.png differ diff --git a/src/images/creatures/Elite rune dragon#Armoured.png b/src/images/creatures/Elite rune dragon#Armoured.png new file mode 100644 index 0000000..d920984 Binary files /dev/null and b/src/images/creatures/Elite rune dragon#Armoured.png differ diff --git a/src/images/creatures/Elite rune dragon#Unarmoured.png b/src/images/creatures/Elite rune dragon#Unarmoured.png new file mode 100644 index 0000000..3bea209 Binary files /dev/null and b/src/images/creatures/Elite rune dragon#Unarmoured.png differ diff --git a/src/images/creatures/Enclave guard#Default.png b/src/images/creatures/Enclave guard#Default.png new file mode 100644 index 0000000..ad246fc Binary files /dev/null and b/src/images/creatures/Enclave guard#Default.png differ diff --git a/src/images/creatures/Enduring glacyte#Default.png b/src/images/creatures/Enduring glacyte#Default.png new file mode 100644 index 0000000..95ad116 Binary files /dev/null and b/src/images/creatures/Enduring glacyte#Default.png differ diff --git a/src/images/creatures/Engorged lava strykewyrm#Default.png b/src/images/creatures/Engorged lava strykewyrm#Default.png new file mode 100644 index 0000000..430a8f6 Binary files /dev/null and b/src/images/creatures/Engorged lava strykewyrm#Default.png differ diff --git a/src/images/creatures/Exiled Kalphite Queen#First form.png b/src/images/creatures/Exiled Kalphite Queen#First form.png new file mode 100644 index 0000000..e4be535 Binary files /dev/null and b/src/images/creatures/Exiled Kalphite Queen#First form.png differ diff --git a/src/images/creatures/Exiled Kalphite Queen#Second form.png b/src/images/creatures/Exiled Kalphite Queen#Second form.png new file mode 100644 index 0000000..6445856 Binary files /dev/null and b/src/images/creatures/Exiled Kalphite Queen#Second form.png differ diff --git a/src/images/creatures/Exiled kalphite guardian#Default.png b/src/images/creatures/Exiled kalphite guardian#Default.png new file mode 100644 index 0000000..f8b0e8e Binary files /dev/null and b/src/images/creatures/Exiled kalphite guardian#Default.png differ diff --git a/src/images/creatures/Exiled kalphite marauder#Kalphite King.png b/src/images/creatures/Exiled kalphite marauder#Kalphite King.png new file mode 100644 index 0000000..00335b4 Binary files /dev/null and b/src/images/creatures/Exiled kalphite marauder#Kalphite King.png differ diff --git a/src/images/creatures/Exiled kalphite marauder#Normal.png b/src/images/creatures/Exiled kalphite marauder#Normal.png new file mode 100644 index 0000000..00335b4 Binary files /dev/null and b/src/images/creatures/Exiled kalphite marauder#Normal.png differ diff --git a/src/images/creatures/Exiled kalphite paragon#Default.png b/src/images/creatures/Exiled kalphite paragon#Default.png new file mode 100644 index 0000000..3efdba5 Binary files /dev/null and b/src/images/creatures/Exiled kalphite paragon#Default.png differ diff --git a/src/images/creatures/Exiled kalphite soldier#Default.png b/src/images/creatures/Exiled kalphite soldier#Default.png new file mode 100644 index 0000000..7df3604 Binary files /dev/null and b/src/images/creatures/Exiled kalphite soldier#Default.png differ diff --git a/src/images/creatures/Exiled kalphite worker#Default.png b/src/images/creatures/Exiled kalphite worker#Default.png new file mode 100644 index 0000000..7eef506 Binary files /dev/null and b/src/images/creatures/Exiled kalphite worker#Default.png differ diff --git a/src/images/creatures/Feline akh#Default.png b/src/images/creatures/Feline akh#Default.png new file mode 100644 index 0000000..0978dea Binary files /dev/null and b/src/images/creatures/Feline akh#Default.png differ diff --git a/src/images/creatures/Fenris wolf#Default.png b/src/images/creatures/Fenris wolf#Default.png new file mode 100644 index 0000000..d8de43b Binary files /dev/null and b/src/images/creatures/Fenris wolf#Default.png differ diff --git a/src/images/creatures/Feral Dinosaur#Dinosaur invasion.png b/src/images/creatures/Feral Dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..bad669e Binary files /dev/null and b/src/images/creatures/Feral Dinosaur#Dinosaur invasion.png differ diff --git a/src/images/creatures/Feral Dinosaur#Normal.png b/src/images/creatures/Feral Dinosaur#Normal.png new file mode 100644 index 0000000..bad669e Binary files /dev/null and b/src/images/creatures/Feral Dinosaur#Normal.png differ diff --git a/src/images/creatures/Feral vampyre#Spider.png b/src/images/creatures/Feral vampyre#Spider.png new file mode 100644 index 0000000..bd19b83 Binary files /dev/null and b/src/images/creatures/Feral vampyre#Spider.png differ diff --git a/src/images/creatures/Feral vampyre#Standard.png b/src/images/creatures/Feral vampyre#Standard.png new file mode 100644 index 0000000..bd19b83 Binary files /dev/null and b/src/images/creatures/Feral vampyre#Standard.png differ diff --git a/src/images/creatures/Fetid zombie#1.png b/src/images/creatures/Fetid zombie#1.png new file mode 100644 index 0000000..dd6a9f3 Binary files /dev/null and b/src/images/creatures/Fetid zombie#1.png differ diff --git a/src/images/creatures/Fetid zombie#2.png b/src/images/creatures/Fetid zombie#2.png new file mode 100644 index 0000000..ffdac9d Binary files /dev/null and b/src/images/creatures/Fetid zombie#2.png differ diff --git a/src/images/creatures/Fever spider#Default.png b/src/images/creatures/Fever spider#Default.png new file mode 100644 index 0000000..2c29478 Binary files /dev/null and b/src/images/creatures/Fever spider#Default.png differ diff --git a/src/images/creatures/Fire giant#Default.png b/src/images/creatures/Fire giant#Default.png new file mode 100644 index 0000000..cd2fc9b Binary files /dev/null and b/src/images/creatures/Fire giant#Default.png differ diff --git a/src/images/creatures/Flesh Crawler#Default.png b/src/images/creatures/Flesh Crawler#Default.png new file mode 100644 index 0000000..861e248 Binary files /dev/null and b/src/images/creatures/Flesh Crawler#Default.png differ diff --git a/src/images/creatures/Flight Kilisa#Default.png b/src/images/creatures/Flight Kilisa#Default.png new file mode 100644 index 0000000..f8aec2c Binary files /dev/null and b/src/images/creatures/Flight Kilisa#Default.png differ diff --git a/src/images/creatures/Flockleader Geerin#Default.png b/src/images/creatures/Flockleader Geerin#Default.png new file mode 100644 index 0000000..34e17de Binary files /dev/null and b/src/images/creatures/Flockleader Geerin#Default.png differ diff --git a/src/images/creatures/Force muspah#Default.png b/src/images/creatures/Force muspah#Default.png new file mode 100644 index 0000000..651f5bb Binary files /dev/null and b/src/images/creatures/Force muspah#Default.png differ diff --git a/src/images/creatures/Frog#Default.png b/src/images/creatures/Frog#Default.png new file mode 100644 index 0000000..7f78675 Binary files /dev/null and b/src/images/creatures/Frog#Default.png differ diff --git a/src/images/creatures/Frogeel#Default.png b/src/images/creatures/Frogeel#Default.png new file mode 100644 index 0000000..cbde221 Binary files /dev/null and b/src/images/creatures/Frogeel#Default.png differ diff --git a/src/images/creatures/Frost dragon#Default.png b/src/images/creatures/Frost dragon#Default.png new file mode 100644 index 0000000..8c6c579 Binary files /dev/null and b/src/images/creatures/Frost dragon#Default.png differ diff --git a/src/images/creatures/Fungal mage#Normal.png b/src/images/creatures/Fungal mage#Normal.png new file mode 100644 index 0000000..9b20fab Binary files /dev/null and b/src/images/creatures/Fungal mage#Normal.png differ diff --git a/src/images/creatures/Fungal mage#Weakened.png b/src/images/creatures/Fungal mage#Weakened.png new file mode 100644 index 0000000..d5b38b6 Binary files /dev/null and b/src/images/creatures/Fungal mage#Weakened.png differ diff --git a/src/images/creatures/Ganodermic beast#Neem oil.png b/src/images/creatures/Ganodermic beast#Neem oil.png new file mode 100644 index 0000000..acae4dc Binary files /dev/null and b/src/images/creatures/Ganodermic beast#Neem oil.png differ diff --git a/src/images/creatures/Ganodermic beast#Normal.png b/src/images/creatures/Ganodermic beast#Normal.png new file mode 100644 index 0000000..4703238 Binary files /dev/null and b/src/images/creatures/Ganodermic beast#Normal.png differ diff --git a/src/images/creatures/Ganodermic runt#Neem oil.png b/src/images/creatures/Ganodermic runt#Neem oil.png new file mode 100644 index 0000000..5f4ff37 Binary files /dev/null and b/src/images/creatures/Ganodermic runt#Neem oil.png differ diff --git a/src/images/creatures/Ganodermic runt#Normal.png b/src/images/creatures/Ganodermic runt#Normal.png new file mode 100644 index 0000000..9f70a8e Binary files /dev/null and b/src/images/creatures/Ganodermic runt#Normal.png differ diff --git a/src/images/creatures/Gargoyle#Regular.png b/src/images/creatures/Gargoyle#Regular.png new file mode 100644 index 0000000..f2c834f Binary files /dev/null and b/src/images/creatures/Gargoyle#Regular.png differ diff --git a/src/images/creatures/Gargoyle#Wilderness.png b/src/images/creatures/Gargoyle#Wilderness.png new file mode 100644 index 0000000..f2c834f Binary files /dev/null and b/src/images/creatures/Gargoyle#Wilderness.png differ diff --git a/src/images/creatures/Gelatinous abomination#Default.png b/src/images/creatures/Gelatinous abomination#Default.png new file mode 100644 index 0000000..08f6dca Binary files /dev/null and b/src/images/creatures/Gelatinous abomination#Default.png differ diff --git a/src/images/creatures/General Graardor#Hard mode.png b/src/images/creatures/General Graardor#Hard mode.png new file mode 100644 index 0000000..5d4d81a Binary files /dev/null and b/src/images/creatures/General Graardor#Hard mode.png differ diff --git a/src/images/creatures/General Graardor#Normal.png b/src/images/creatures/General Graardor#Normal.png new file mode 100644 index 0000000..5d4d81a Binary files /dev/null and b/src/images/creatures/General Graardor#Normal.png differ diff --git a/src/images/creatures/General Graardor#The Mighty Fall.png b/src/images/creatures/General Graardor#The Mighty Fall.png new file mode 100644 index 0000000..e4f331e Binary files /dev/null and b/src/images/creatures/General Graardor#The Mighty Fall.png differ diff --git a/src/images/creatures/General Graardor#The World Wakes.png b/src/images/creatures/General Graardor#The World Wakes.png new file mode 100644 index 0000000..5d4d81a Binary files /dev/null and b/src/images/creatures/General Graardor#The World Wakes.png differ diff --git a/src/images/creatures/General malpractitioner#Default.png b/src/images/creatures/General malpractitioner#Default.png new file mode 100644 index 0000000..1d9266f Binary files /dev/null and b/src/images/creatures/General malpractitioner#Default.png differ diff --git a/src/images/creatures/Ghast#Regular.png b/src/images/creatures/Ghast#Regular.png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/src/images/creatures/Ghast#Regular.png differ diff --git a/src/images/creatures/Ghast#Temple Trekking (Easy Route).png b/src/images/creatures/Ghast#Temple Trekking (Easy Route).png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/src/images/creatures/Ghast#Temple Trekking (Easy Route).png differ diff --git a/src/images/creatures/Ghast#Temple Trekking (Hard Route).png b/src/images/creatures/Ghast#Temple Trekking (Hard Route).png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/src/images/creatures/Ghast#Temple Trekking (Hard Route).png differ diff --git a/src/images/creatures/Ghast#Temple Trekking (Medium Route).png b/src/images/creatures/Ghast#Temple Trekking (Medium Route).png new file mode 100644 index 0000000..9ed71dc Binary files /dev/null and b/src/images/creatures/Ghast#Temple Trekking (Medium Route).png differ diff --git a/src/images/creatures/Ghost (Abandoned Mine)#Default.png b/src/images/creatures/Ghost (Abandoned Mine)#Default.png new file mode 100644 index 0000000..e040187 Binary files /dev/null and b/src/images/creatures/Ghost (Abandoned Mine)#Default.png differ diff --git a/src/images/creatures/Ghost (Stronghold of Security)#1.png b/src/images/creatures/Ghost (Stronghold of Security)#1.png new file mode 100644 index 0000000..1735985 Binary files /dev/null and b/src/images/creatures/Ghost (Stronghold of Security)#1.png differ diff --git a/src/images/creatures/Ghost (Stronghold of Security)#2.png b/src/images/creatures/Ghost (Stronghold of Security)#2.png new file mode 100644 index 0000000..9b4f956 Binary files /dev/null and b/src/images/creatures/Ghost (Stronghold of Security)#2.png differ diff --git a/src/images/creatures/Ghost (Stronghold of Security)#3.png b/src/images/creatures/Ghost (Stronghold of Security)#3.png new file mode 100644 index 0000000..534f8f2 Binary files /dev/null and b/src/images/creatures/Ghost (Stronghold of Security)#3.png differ diff --git a/src/images/creatures/Ghost (Stronghold of Security)#4.png b/src/images/creatures/Ghost (Stronghold of Security)#4.png new file mode 100644 index 0000000..f59ae03 Binary files /dev/null and b/src/images/creatures/Ghost (Stronghold of Security)#4.png differ diff --git a/src/images/creatures/Ghost (Stronghold of Security)#5.png b/src/images/creatures/Ghost (Stronghold of Security)#5.png new file mode 100644 index 0000000..b41186e Binary files /dev/null and b/src/images/creatures/Ghost (Stronghold of Security)#5.png differ diff --git a/src/images/creatures/Ghost#1.png b/src/images/creatures/Ghost#1.png new file mode 100644 index 0000000..03170a4 Binary files /dev/null and b/src/images/creatures/Ghost#1.png differ diff --git a/src/images/creatures/Ghost#2.png b/src/images/creatures/Ghost#2.png new file mode 100644 index 0000000..7860854 Binary files /dev/null and b/src/images/creatures/Ghost#2.png differ diff --git a/src/images/creatures/Ghost#3.png b/src/images/creatures/Ghost#3.png new file mode 100644 index 0000000..03170a4 Binary files /dev/null and b/src/images/creatures/Ghost#3.png differ diff --git a/src/images/creatures/Ghost#4.png b/src/images/creatures/Ghost#4.png new file mode 100644 index 0000000..1155b09 Binary files /dev/null and b/src/images/creatures/Ghost#4.png differ diff --git a/src/images/creatures/Ghost#5.png b/src/images/creatures/Ghost#5.png new file mode 100644 index 0000000..8bc47f2 Binary files /dev/null and b/src/images/creatures/Ghost#5.png differ diff --git a/src/images/creatures/Ghost#6.png b/src/images/creatures/Ghost#6.png new file mode 100644 index 0000000..6a0b02f Binary files /dev/null and b/src/images/creatures/Ghost#6.png differ diff --git a/src/images/creatures/Ghost#7.png b/src/images/creatures/Ghost#7.png new file mode 100644 index 0000000..9ab5b66 Binary files /dev/null and b/src/images/creatures/Ghost#7.png differ diff --git a/src/images/creatures/Ghostly troll bruiser#Default.png b/src/images/creatures/Ghostly troll bruiser#Default.png new file mode 100644 index 0000000..bc1b2dc Binary files /dev/null and b/src/images/creatures/Ghostly troll bruiser#Default.png differ diff --git a/src/images/creatures/Ghostly troll thrower#Default.png b/src/images/creatures/Ghostly troll thrower#Default.png new file mode 100644 index 0000000..0134d14 Binary files /dev/null and b/src/images/creatures/Ghostly troll thrower#Default.png differ diff --git a/src/images/creatures/Ghostly warrior#Default.png b/src/images/creatures/Ghostly warrior#Default.png new file mode 100644 index 0000000..c834c71 Binary files /dev/null and b/src/images/creatures/Ghostly warrior#Default.png differ diff --git a/src/images/creatures/Ghoul (Paterdomus)#Default.png b/src/images/creatures/Ghoul (Paterdomus)#Default.png new file mode 100644 index 0000000..b5653ad Binary files /dev/null and b/src/images/creatures/Ghoul (Paterdomus)#Default.png differ diff --git a/src/images/creatures/Ghoul#Blue.png b/src/images/creatures/Ghoul#Blue.png new file mode 100644 index 0000000..e10fc77 Binary files /dev/null and b/src/images/creatures/Ghoul#Blue.png differ diff --git a/src/images/creatures/Ghoul#Brown.png b/src/images/creatures/Ghoul#Brown.png new file mode 100644 index 0000000..b5653ad Binary files /dev/null and b/src/images/creatures/Ghoul#Brown.png differ diff --git a/src/images/creatures/Giant bat#Brine Cavern.png b/src/images/creatures/Giant bat#Brine Cavern.png new file mode 100644 index 0000000..c7b5694 Binary files /dev/null and b/src/images/creatures/Giant bat#Brine Cavern.png differ diff --git a/src/images/creatures/Giant bat#Normal.png b/src/images/creatures/Giant bat#Normal.png new file mode 100644 index 0000000..d8c406c Binary files /dev/null and b/src/images/creatures/Giant bat#Normal.png differ diff --git a/src/images/creatures/Giant crypt rat#Default.png b/src/images/creatures/Giant crypt rat#Default.png new file mode 100644 index 0000000..4085cb3 Binary files /dev/null and b/src/images/creatures/Giant crypt rat#Default.png differ diff --git a/src/images/creatures/Giant crypt spider#Default.png b/src/images/creatures/Giant crypt spider#Default.png new file mode 100644 index 0000000..782a11d Binary files /dev/null and b/src/images/creatures/Giant crypt spider#Default.png differ diff --git a/src/images/creatures/Giant frog#Default.png b/src/images/creatures/Giant frog#Default.png new file mode 100644 index 0000000..5054b8b Binary files /dev/null and b/src/images/creatures/Giant frog#Default.png differ diff --git a/src/images/creatures/Giant mole#Hard Mode.png b/src/images/creatures/Giant mole#Hard Mode.png new file mode 100644 index 0000000..4c27a90 Binary files /dev/null and b/src/images/creatures/Giant mole#Hard Mode.png differ diff --git a/src/images/creatures/Giant mole#Normal.png b/src/images/creatures/Giant mole#Normal.png new file mode 100644 index 0000000..4c27a90 Binary files /dev/null and b/src/images/creatures/Giant mole#Normal.png differ diff --git a/src/images/creatures/Giant rat#Level 7 (brown).png b/src/images/creatures/Giant rat#Level 7 (brown).png new file mode 100644 index 0000000..8cba6e8 Binary files /dev/null and b/src/images/creatures/Giant rat#Level 7 (brown).png differ diff --git a/src/images/creatures/Giant rat#Level 7 (brown, arrows).png b/src/images/creatures/Giant rat#Level 7 (brown, arrows).png new file mode 100644 index 0000000..841acf8 Binary files /dev/null and b/src/images/creatures/Giant rat#Level 7 (brown, arrows).png differ diff --git a/src/images/creatures/Giant rat#Level 7 (grey).png b/src/images/creatures/Giant rat#Level 7 (grey).png new file mode 100644 index 0000000..fbdf779 Binary files /dev/null and b/src/images/creatures/Giant rat#Level 7 (grey).png differ diff --git a/src/images/creatures/Giant rat#Level 7 (grey, arrows).png b/src/images/creatures/Giant rat#Level 7 (grey, arrows).png new file mode 100644 index 0000000..b959c9f Binary files /dev/null and b/src/images/creatures/Giant rat#Level 7 (grey, arrows).png differ diff --git a/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 1).png b/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 1).png new file mode 100644 index 0000000..cf539d2 Binary files /dev/null and b/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 1).png differ diff --git a/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 2).png b/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 2).png new file mode 100644 index 0000000..8ffc2d8 Binary files /dev/null and b/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 2).png differ diff --git a/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 3).png b/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 3).png new file mode 100644 index 0000000..69f057d Binary files /dev/null and b/src/images/creatures/Giant rat#Level 9 (Stronghold of Security, 3).png differ diff --git a/src/images/creatures/Giant skeleton (Shadow Dungeon)#Default.png b/src/images/creatures/Giant skeleton (Shadow Dungeon)#Default.png new file mode 100644 index 0000000..b7d4b82 Binary files /dev/null and b/src/images/creatures/Giant skeleton (Shadow Dungeon)#Default.png differ diff --git a/src/images/creatures/Giant skeleton (Tarn's Lair)#Default.png b/src/images/creatures/Giant skeleton (Tarn's Lair)#Default.png new file mode 100644 index 0000000..b7d4b82 Binary files /dev/null and b/src/images/creatures/Giant skeleton (Tarn's Lair)#Default.png differ diff --git a/src/images/creatures/Giant slime#Normal mode.png b/src/images/creatures/Giant slime#Normal mode.png new file mode 100644 index 0000000..4341deb Binary files /dev/null and b/src/images/creatures/Giant slime#Normal mode.png differ diff --git a/src/images/creatures/Giant slime#Story mode.png b/src/images/creatures/Giant slime#Story mode.png new file mode 100644 index 0000000..4341deb Binary files /dev/null and b/src/images/creatures/Giant slime#Story mode.png differ diff --git a/src/images/creatures/Giant spider#Level 2.png b/src/images/creatures/Giant spider#Level 2.png new file mode 100644 index 0000000..c822f74 Binary files /dev/null and b/src/images/creatures/Giant spider#Level 2.png differ diff --git a/src/images/creatures/Giant spider#Level 29.png b/src/images/creatures/Giant spider#Level 29.png new file mode 100644 index 0000000..6317dd8 Binary files /dev/null and b/src/images/creatures/Giant spider#Level 29.png differ diff --git a/src/images/creatures/Giant spider#Level 33.png b/src/images/creatures/Giant spider#Level 33.png new file mode 100644 index 0000000..c822f74 Binary files /dev/null and b/src/images/creatures/Giant spider#Level 33.png differ diff --git a/src/images/creatures/Giant worm#Default.png b/src/images/creatures/Giant worm#Default.png new file mode 100644 index 0000000..b6bea35 Binary files /dev/null and b/src/images/creatures/Giant worm#Default.png differ diff --git a/src/images/creatures/Glacor#Default.png b/src/images/creatures/Glacor#Default.png new file mode 100644 index 0000000..8fb2071 Binary files /dev/null and b/src/images/creatures/Glacor#Default.png differ diff --git a/src/images/creatures/Glacyte (Arch-Glacor)#Magic.png b/src/images/creatures/Glacyte (Arch-Glacor)#Magic.png new file mode 100644 index 0000000..95d4823 Binary files /dev/null and b/src/images/creatures/Glacyte (Arch-Glacor)#Magic.png differ diff --git a/src/images/creatures/Glacyte (Arch-Glacor)#Melee.png b/src/images/creatures/Glacyte (Arch-Glacor)#Melee.png new file mode 100644 index 0000000..743fbb5 Binary files /dev/null and b/src/images/creatures/Glacyte (Arch-Glacor)#Melee.png differ diff --git a/src/images/creatures/Glacyte#Magic.png b/src/images/creatures/Glacyte#Magic.png new file mode 100644 index 0000000..95d4823 Binary files /dev/null and b/src/images/creatures/Glacyte#Magic.png differ diff --git a/src/images/creatures/Glacyte#Melee.png b/src/images/creatures/Glacyte#Melee.png new file mode 100644 index 0000000..743fbb5 Binary files /dev/null and b/src/images/creatures/Glacyte#Melee.png differ diff --git a/src/images/creatures/Gladius#Default.png b/src/images/creatures/Gladius#Default.png new file mode 100644 index 0000000..16890db Binary files /dev/null and b/src/images/creatures/Gladius#Default.png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Green (1).png b/src/images/creatures/Goblin (Goblin Village)#Green (1).png new file mode 100644 index 0000000..b66acc3 Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Green (1).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Green (2).png b/src/images/creatures/Goblin (Goblin Village)#Green (2).png new file mode 100644 index 0000000..d89c832 Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Green (2).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Green (3).png b/src/images/creatures/Goblin (Goblin Village)#Green (3).png new file mode 100644 index 0000000..3e86842 Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Green (3).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Green (4).png b/src/images/creatures/Goblin (Goblin Village)#Green (4).png new file mode 100644 index 0000000..477231c Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Green (4).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Green (5).png b/src/images/creatures/Goblin (Goblin Village)#Green (5).png new file mode 100644 index 0000000..320dc3d Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Green (5).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Green (6).png b/src/images/creatures/Goblin (Goblin Village)#Green (6).png new file mode 100644 index 0000000..8fec78e Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Green (6).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Red (1).png b/src/images/creatures/Goblin (Goblin Village)#Red (1).png new file mode 100644 index 0000000..0a5502e Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Red (1).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Red (2).png b/src/images/creatures/Goblin (Goblin Village)#Red (2).png new file mode 100644 index 0000000..9b9125d Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Red (2).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Red (3).png b/src/images/creatures/Goblin (Goblin Village)#Red (3).png new file mode 100644 index 0000000..bbc8650 Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Red (3).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Red (4).png b/src/images/creatures/Goblin (Goblin Village)#Red (4).png new file mode 100644 index 0000000..34b4b74 Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Red (4).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Red (5).png b/src/images/creatures/Goblin (Goblin Village)#Red (5).png new file mode 100644 index 0000000..ea6f18b Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Red (5).png differ diff --git a/src/images/creatures/Goblin (Goblin Village)#Red (6).png b/src/images/creatures/Goblin (Goblin Village)#Red (6).png new file mode 100644 index 0000000..25cd3c8 Binary files /dev/null and b/src/images/creatures/Goblin (Goblin Village)#Red (6).png differ diff --git a/src/images/creatures/Goblin (God Wars Dungeon)#Banner.png b/src/images/creatures/Goblin (God Wars Dungeon)#Banner.png new file mode 100644 index 0000000..ed25efc Binary files /dev/null and b/src/images/creatures/Goblin (God Wars Dungeon)#Banner.png differ diff --git a/src/images/creatures/Goblin (God Wars Dungeon)#Battleaxe.png b/src/images/creatures/Goblin (God Wars Dungeon)#Battleaxe.png new file mode 100644 index 0000000..daf082f Binary files /dev/null and b/src/images/creatures/Goblin (God Wars Dungeon)#Battleaxe.png differ diff --git a/src/images/creatures/Goblin (God Wars Dungeon)#Spear.png b/src/images/creatures/Goblin (God Wars Dungeon)#Spear.png new file mode 100644 index 0000000..3dc5536 Binary files /dev/null and b/src/images/creatures/Goblin (God Wars Dungeon)#Spear.png differ diff --git a/src/images/creatures/Goblin (God Wars Dungeon)#Sword.png b/src/images/creatures/Goblin (God Wars Dungeon)#Sword.png new file mode 100644 index 0000000..dc9d0d5 Binary files /dev/null and b/src/images/creatures/Goblin (God Wars Dungeon)#Sword.png differ diff --git a/src/images/creatures/Goblin (God Wars Dungeon)#Warhammer.png b/src/images/creatures/Goblin (God Wars Dungeon)#Warhammer.png new file mode 100644 index 0000000..a2ce0e5 Binary files /dev/null and b/src/images/creatures/Goblin (God Wars Dungeon)#Warhammer.png differ diff --git a/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (a).png b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (a).png new file mode 100644 index 0000000..e67def4 Binary files /dev/null and b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (a).png differ diff --git a/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (b).png b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (b).png new file mode 100644 index 0000000..f725001 Binary files /dev/null and b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (b).png differ diff --git a/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (c).png b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (c).png new file mode 100644 index 0000000..566196c Binary files /dev/null and b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (c).png differ diff --git a/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (d).png b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (d).png new file mode 100644 index 0000000..b08ec18 Binary files /dev/null and b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (d).png differ diff --git a/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (e).png b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (e).png new file mode 100644 index 0000000..408e631 Binary files /dev/null and b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (e).png differ diff --git a/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (f).png b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (f).png new file mode 100644 index 0000000..9e9f1d8 Binary files /dev/null and b/src/images/creatures/Goblin (Stronghold of Security)#Level 5 (f).png differ diff --git a/src/images/creatures/Goblin#Level 1 (Slayer challenge).png b/src/images/creatures/Goblin#Level 1 (Slayer challenge).png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/src/images/creatures/Goblin#Level 1 (Slayer challenge).png differ diff --git a/src/images/creatures/Goblin#Level 11 (Slayer challenge).png b/src/images/creatures/Goblin#Level 11 (Slayer challenge).png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/src/images/creatures/Goblin#Level 11 (Slayer challenge).png differ diff --git a/src/images/creatures/Goblin#Level 11.png b/src/images/creatures/Goblin#Level 11.png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/src/images/creatures/Goblin#Level 11.png differ diff --git a/src/images/creatures/Goblin#Level 2.png b/src/images/creatures/Goblin#Level 2.png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/src/images/creatures/Goblin#Level 2.png differ diff --git a/src/images/creatures/Goblin#Level 5 (Slayer challenge).png b/src/images/creatures/Goblin#Level 5 (Slayer challenge).png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/src/images/creatures/Goblin#Level 5 (Slayer challenge).png differ diff --git a/src/images/creatures/Goblin#Level 5.png b/src/images/creatures/Goblin#Level 5.png new file mode 100644 index 0000000..fd15759 Binary files /dev/null and b/src/images/creatures/Goblin#Level 5.png differ diff --git a/src/images/creatures/Gorak#God Wars Dungeon.png b/src/images/creatures/Gorak#God Wars Dungeon.png new file mode 100644 index 0000000..68c3868 Binary files /dev/null and b/src/images/creatures/Gorak#God Wars Dungeon.png differ diff --git a/src/images/creatures/Gorak#Gorak Plane.png b/src/images/creatures/Gorak#Gorak Plane.png new file mode 100644 index 0000000..68c3868 Binary files /dev/null and b/src/images/creatures/Gorak#Gorak Plane.png differ diff --git a/src/images/creatures/Gorak#The World Wakes.png b/src/images/creatures/Gorak#The World Wakes.png new file mode 100644 index 0000000..68c3868 Binary files /dev/null and b/src/images/creatures/Gorak#The World Wakes.png differ diff --git a/src/images/creatures/Gorilla akh#Default.png b/src/images/creatures/Gorilla akh#Default.png new file mode 100644 index 0000000..1d5efc1 Binary files /dev/null and b/src/images/creatures/Gorilla akh#Default.png differ diff --git a/src/images/creatures/Grave scorpion#Default.png b/src/images/creatures/Grave scorpion#Default.png new file mode 100644 index 0000000..b4a25f9 Binary files /dev/null and b/src/images/creatures/Grave scorpion#Default.png differ diff --git a/src/images/creatures/Graveside Phantom#Default.png b/src/images/creatures/Graveside Phantom#Default.png new file mode 100644 index 0000000..f6efc25 Binary files /dev/null and b/src/images/creatures/Graveside Phantom#Default.png differ diff --git a/src/images/creatures/Greater demon (elite)#Default.png b/src/images/creatures/Greater demon (elite)#Default.png new file mode 100644 index 0000000..d0acd38 Binary files /dev/null and b/src/images/creatures/Greater demon (elite)#Default.png differ diff --git a/src/images/creatures/Greater demon ash lord#The Zamorakian Undercity.png b/src/images/creatures/Greater demon ash lord#The Zamorakian Undercity.png new file mode 100644 index 0000000..d0acd38 Binary files /dev/null and b/src/images/creatures/Greater demon ash lord#The Zamorakian Undercity.png differ diff --git a/src/images/creatures/Greater demon ash lord#Wilderness.png b/src/images/creatures/Greater demon ash lord#Wilderness.png new file mode 100644 index 0000000..d0acd38 Binary files /dev/null and b/src/images/creatures/Greater demon ash lord#Wilderness.png differ diff --git a/src/images/creatures/Greater demon berserker#The Zamorakian Undercity.png b/src/images/creatures/Greater demon berserker#The Zamorakian Undercity.png new file mode 100644 index 0000000..82c4105 Binary files /dev/null and b/src/images/creatures/Greater demon berserker#The Zamorakian Undercity.png differ diff --git a/src/images/creatures/Greater demon berserker#Wilderness.png b/src/images/creatures/Greater demon berserker#Wilderness.png new file mode 100644 index 0000000..82c4105 Binary files /dev/null and b/src/images/creatures/Greater demon berserker#Wilderness.png differ diff --git a/src/images/creatures/Greater demon brute#Default.png b/src/images/creatures/Greater demon brute#Default.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/src/images/creatures/Greater demon brute#Default.png differ diff --git a/src/images/creatures/Greater demon pyromancer#The Zamorakian Undercity.png b/src/images/creatures/Greater demon pyromancer#The Zamorakian Undercity.png new file mode 100644 index 0000000..469a9d3 Binary files /dev/null and b/src/images/creatures/Greater demon pyromancer#The Zamorakian Undercity.png differ diff --git a/src/images/creatures/Greater demon pyromancer#Wilderness.png b/src/images/creatures/Greater demon pyromancer#Wilderness.png new file mode 100644 index 0000000..469a9d3 Binary files /dev/null and b/src/images/creatures/Greater demon pyromancer#Wilderness.png differ diff --git a/src/images/creatures/Greater demon sage#Default.png b/src/images/creatures/Greater demon sage#Default.png new file mode 100644 index 0000000..6d29c16 Binary files /dev/null and b/src/images/creatures/Greater demon sage#Default.png differ diff --git a/src/images/creatures/Greater demon savage#Default.png b/src/images/creatures/Greater demon savage#Default.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/src/images/creatures/Greater demon savage#Default.png differ diff --git a/src/images/creatures/Greater demon#1.png b/src/images/creatures/Greater demon#1.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/src/images/creatures/Greater demon#1.png differ diff --git a/src/images/creatures/Greater demon#2.png b/src/images/creatures/Greater demon#2.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/src/images/creatures/Greater demon#2.png differ diff --git a/src/images/creatures/Greater demon#3.png b/src/images/creatures/Greater demon#3.png new file mode 100644 index 0000000..82c4105 Binary files /dev/null and b/src/images/creatures/Greater demon#3.png differ diff --git a/src/images/creatures/Greater demon#4.png b/src/images/creatures/Greater demon#4.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/src/images/creatures/Greater demon#4.png differ diff --git a/src/images/creatures/Greater demon#5.png b/src/images/creatures/Greater demon#5.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/src/images/creatures/Greater demon#5.png differ diff --git a/src/images/creatures/Green dragon#1.png b/src/images/creatures/Green dragon#1.png new file mode 100644 index 0000000..6427cdd Binary files /dev/null and b/src/images/creatures/Green dragon#1.png differ diff --git a/src/images/creatures/Green dragon#2.png b/src/images/creatures/Green dragon#2.png new file mode 100644 index 0000000..75da7d5 Binary files /dev/null and b/src/images/creatures/Green dragon#2.png differ diff --git a/src/images/creatures/Green dragon#3.png b/src/images/creatures/Green dragon#3.png new file mode 100644 index 0000000..608b97a Binary files /dev/null and b/src/images/creatures/Green dragon#3.png differ diff --git a/src/images/creatures/Green dragon#4.png b/src/images/creatures/Green dragon#4.png new file mode 100644 index 0000000..f9d58d2 Binary files /dev/null and b/src/images/creatures/Green dragon#4.png differ diff --git a/src/images/creatures/Green dragon#5.png b/src/images/creatures/Green dragon#5.png new file mode 100644 index 0000000..b069f74 Binary files /dev/null and b/src/images/creatures/Green dragon#5.png differ diff --git a/src/images/creatures/Gregorovic#Challenge Mode.png b/src/images/creatures/Gregorovic#Challenge Mode.png new file mode 100644 index 0000000..0148046 Binary files /dev/null and b/src/images/creatures/Gregorovic#Challenge Mode.png differ diff --git a/src/images/creatures/Gregorovic#Normal Mode.png b/src/images/creatures/Gregorovic#Normal Mode.png new file mode 100644 index 0000000..0148046 Binary files /dev/null and b/src/images/creatures/Gregorovic#Normal Mode.png differ diff --git a/src/images/creatures/Gregorovic#Sliske's Endgame.png b/src/images/creatures/Gregorovic#Sliske's Endgame.png new file mode 100644 index 0000000..0148046 Binary files /dev/null and b/src/images/creatures/Gregorovic#Sliske's Endgame.png differ diff --git a/src/images/creatures/Grifolapine#Neem oil.png b/src/images/creatures/Grifolapine#Neem oil.png new file mode 100644 index 0000000..41076a7 Binary files /dev/null and b/src/images/creatures/Grifolapine#Neem oil.png differ diff --git a/src/images/creatures/Grifolapine#Normal.png b/src/images/creatures/Grifolapine#Normal.png new file mode 100644 index 0000000..b3b8e6e Binary files /dev/null and b/src/images/creatures/Grifolapine#Normal.png differ diff --git a/src/images/creatures/Grifolaroo#Neem oil.png b/src/images/creatures/Grifolaroo#Neem oil.png new file mode 100644 index 0000000..9c55e8a Binary files /dev/null and b/src/images/creatures/Grifolaroo#Neem oil.png differ diff --git a/src/images/creatures/Grifolaroo#Normal.png b/src/images/creatures/Grifolaroo#Normal.png new file mode 100644 index 0000000..159f5c5 Binary files /dev/null and b/src/images/creatures/Grifolaroo#Normal.png differ diff --git a/src/images/creatures/Grizzly bear cub#Default.png b/src/images/creatures/Grizzly bear cub#Default.png new file mode 100644 index 0000000..1044909 Binary files /dev/null and b/src/images/creatures/Grizzly bear cub#Default.png differ diff --git a/src/images/creatures/Grizzly bear#Standard.png b/src/images/creatures/Grizzly bear#Standard.png new file mode 100644 index 0000000..fc8b0f4 Binary files /dev/null and b/src/images/creatures/Grizzly bear#Standard.png differ diff --git a/src/images/creatures/Grizzly bear#Tirannwn.png b/src/images/creatures/Grizzly bear#Tirannwn.png new file mode 100644 index 0000000..fc8b0f4 Binary files /dev/null and b/src/images/creatures/Grizzly bear#Tirannwn.png differ diff --git a/src/images/creatures/Grotworm#Default.png b/src/images/creatures/Grotworm#Default.png new file mode 100644 index 0000000..b6bea35 Binary files /dev/null and b/src/images/creatures/Grotworm#Default.png differ diff --git a/src/images/creatures/Guard (cave goblin)#Club.png b/src/images/creatures/Guard (cave goblin)#Club.png new file mode 100644 index 0000000..1bd53d4 Binary files /dev/null and b/src/images/creatures/Guard (cave goblin)#Club.png differ diff --git a/src/images/creatures/Guard (cave goblin)#Spear.png b/src/images/creatures/Guard (cave goblin)#Spear.png new file mode 100644 index 0000000..d15831b Binary files /dev/null and b/src/images/creatures/Guard (cave goblin)#Spear.png differ diff --git a/src/images/creatures/Guard dog#Default.png b/src/images/creatures/Guard dog#Default.png new file mode 100644 index 0000000..fa5eb54 Binary files /dev/null and b/src/images/creatures/Guard dog#Default.png differ diff --git a/src/images/creatures/Guthan the Infested#Normal.png b/src/images/creatures/Guthan the Infested#Normal.png new file mode 100644 index 0000000..99b8492 Binary files /dev/null and b/src/images/creatures/Guthan the Infested#Normal.png differ diff --git a/src/images/creatures/Guthan the Infested#Rise of the Six.png b/src/images/creatures/Guthan the Infested#Rise of the Six.png new file mode 100644 index 0000000..aa8e456 Binary files /dev/null and b/src/images/creatures/Guthan the Infested#Rise of the Six.png differ diff --git a/src/images/creatures/Guthan the Infested#Ritual of the Mahjarrat.png b/src/images/creatures/Guthan the Infested#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..99b8492 Binary files /dev/null and b/src/images/creatures/Guthan the Infested#Ritual of the Mahjarrat.png differ diff --git a/src/images/creatures/Har-Aken#Head.png b/src/images/creatures/Har-Aken#Head.png new file mode 100644 index 0000000..2519191 Binary files /dev/null and b/src/images/creatures/Har-Aken#Head.png differ diff --git a/src/images/creatures/Har-Aken#Magic Tentacle.png b/src/images/creatures/Har-Aken#Magic Tentacle.png new file mode 100644 index 0000000..a60d5dd Binary files /dev/null and b/src/images/creatures/Har-Aken#Magic Tentacle.png differ diff --git a/src/images/creatures/Har-Aken#Ranged Tentacle.png b/src/images/creatures/Har-Aken#Ranged Tentacle.png new file mode 100644 index 0000000..4dbdb04 Binary files /dev/null and b/src/images/creatures/Har-Aken#Ranged Tentacle.png differ diff --git a/src/images/creatures/Harpie Bug Swarm (elite)#Default.png b/src/images/creatures/Harpie Bug Swarm (elite)#Default.png new file mode 100644 index 0000000..676de93 Binary files /dev/null and b/src/images/creatures/Harpie Bug Swarm (elite)#Default.png differ diff --git a/src/images/creatures/Harpie Bug Swarm#Default.png b/src/images/creatures/Harpie Bug Swarm#Default.png new file mode 100644 index 0000000..676de93 Binary files /dev/null and b/src/images/creatures/Harpie Bug Swarm#Default.png differ diff --git a/src/images/creatures/Hellhound (Heart of Gielinor)#Default.png b/src/images/creatures/Hellhound (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound (Heart of Gielinor)#Default.png differ diff --git a/src/images/creatures/Hellhound (The Zamorakian Undercity)#Default.png b/src/images/creatures/Hellhound (The Zamorakian Undercity)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound (The Zamorakian Undercity)#Default.png differ diff --git a/src/images/creatures/Hellhound (summoned)#Default.png b/src/images/creatures/Hellhound (summoned)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound (summoned)#Default.png differ diff --git a/src/images/creatures/Hellhound Alpha#Default.png b/src/images/creatures/Hellhound Alpha#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound Alpha#Default.png differ diff --git a/src/images/creatures/Hellhound Hunter (summoned)#Default.png b/src/images/creatures/Hellhound Hunter (summoned)#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound Hunter (summoned)#Default.png differ diff --git a/src/images/creatures/Hellhound Hunter#Default.png b/src/images/creatures/Hellhound Hunter#Default.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound Hunter#Default.png differ diff --git a/src/images/creatures/Hellhound#God Wars Dungeon.png b/src/images/creatures/Hellhound#God Wars Dungeon.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound#God Wars Dungeon.png differ diff --git a/src/images/creatures/Hellhound#Level 105.png b/src/images/creatures/Hellhound#Level 105.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound#Level 105.png differ diff --git a/src/images/creatures/Hellhound#Normal.png b/src/images/creatures/Hellhound#Normal.png new file mode 100644 index 0000000..9bb7aa6 Binary files /dev/null and b/src/images/creatures/Hellhound#Normal.png differ diff --git a/src/images/creatures/Helwyr#Challenge Mode.png b/src/images/creatures/Helwyr#Challenge Mode.png new file mode 100644 index 0000000..1cd8db5 Binary files /dev/null and b/src/images/creatures/Helwyr#Challenge Mode.png differ diff --git a/src/images/creatures/Helwyr#Normal Mode.png b/src/images/creatures/Helwyr#Normal Mode.png new file mode 100644 index 0000000..1cd8db5 Binary files /dev/null and b/src/images/creatures/Helwyr#Normal Mode.png differ diff --git a/src/images/creatures/Hermod, the Spirit of War#Normal.png b/src/images/creatures/Hermod, the Spirit of War#Normal.png new file mode 100644 index 0000000..6201526 Binary files /dev/null and b/src/images/creatures/Hermod, the Spirit of War#Normal.png differ diff --git a/src/images/creatures/Hermod, the Spirit of War#Quest.png b/src/images/creatures/Hermod, the Spirit of War#Quest.png new file mode 100644 index 0000000..6201526 Binary files /dev/null and b/src/images/creatures/Hermod, the Spirit of War#Quest.png differ diff --git a/src/images/creatures/Hill Giant#Default.png b/src/images/creatures/Hill Giant#Default.png new file mode 100644 index 0000000..41b2a75 Binary files /dev/null and b/src/images/creatures/Hill Giant#Default.png differ diff --git a/src/images/creatures/Hobgoblin (elite)#Default.png b/src/images/creatures/Hobgoblin (elite)#Default.png new file mode 100644 index 0000000..b53745a Binary files /dev/null and b/src/images/creatures/Hobgoblin (elite)#Default.png differ diff --git a/src/images/creatures/Hobgoblin#Level 15.png b/src/images/creatures/Hobgoblin#Level 15.png new file mode 100644 index 0000000..ddd7edc Binary files /dev/null and b/src/images/creatures/Hobgoblin#Level 15.png differ diff --git a/src/images/creatures/Hobgoblin#Level 18.png b/src/images/creatures/Hobgoblin#Level 18.png new file mode 100644 index 0000000..ed99c04 Binary files /dev/null and b/src/images/creatures/Hobgoblin#Level 18.png differ diff --git a/src/images/creatures/Hobgoblin#Level 91 (GWD).png b/src/images/creatures/Hobgoblin#Level 91 (GWD).png new file mode 100644 index 0000000..ae43bae Binary files /dev/null and b/src/images/creatures/Hobgoblin#Level 91 (GWD).png differ diff --git a/src/images/creatures/Huge skeleton#Normal mode.png b/src/images/creatures/Huge skeleton#Normal mode.png new file mode 100644 index 0000000..606c775 Binary files /dev/null and b/src/images/creatures/Huge skeleton#Normal mode.png differ diff --git a/src/images/creatures/Huge skeleton#Story mode.png b/src/images/creatures/Huge skeleton#Story mode.png new file mode 100644 index 0000000..9434269 Binary files /dev/null and b/src/images/creatures/Huge skeleton#Story mode.png differ diff --git a/src/images/creatures/Hydrix dragon (Dragonkin Laboratory)#Default.png b/src/images/creatures/Hydrix dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..a0ace31 Binary files /dev/null and b/src/images/creatures/Hydrix dragon (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Hydrix dragon#Default.png b/src/images/creatures/Hydrix dragon#Default.png new file mode 100644 index 0000000..af7dd97 Binary files /dev/null and b/src/images/creatures/Hydrix dragon#Default.png differ diff --git a/src/images/creatures/Ice giant#Level 47 (1).png b/src/images/creatures/Ice giant#Level 47 (1).png new file mode 100644 index 0000000..d719e9c Binary files /dev/null and b/src/images/creatures/Ice giant#Level 47 (1).png differ diff --git a/src/images/creatures/Ice giant#Level 47 (2).png b/src/images/creatures/Ice giant#Level 47 (2).png new file mode 100644 index 0000000..8f7e437 Binary files /dev/null and b/src/images/creatures/Ice giant#Level 47 (2).png differ diff --git a/src/images/creatures/Ice nihil#boss.png b/src/images/creatures/Ice nihil#boss.png new file mode 100644 index 0000000..ce13061 Binary files /dev/null and b/src/images/creatures/Ice nihil#boss.png differ diff --git a/src/images/creatures/Ice nihil#normal.png b/src/images/creatures/Ice nihil#normal.png new file mode 100644 index 0000000..ce13061 Binary files /dev/null and b/src/images/creatures/Ice nihil#normal.png differ diff --git a/src/images/creatures/Ice spider#Default.png b/src/images/creatures/Ice spider#Default.png new file mode 100644 index 0000000..33d0cae Binary files /dev/null and b/src/images/creatures/Ice spider#Default.png differ diff --git a/src/images/creatures/Ice strykewyrm#Default.png b/src/images/creatures/Ice strykewyrm#Default.png new file mode 100644 index 0000000..8c920cf Binary files /dev/null and b/src/images/creatures/Ice strykewyrm#Default.png differ diff --git a/src/images/creatures/Ice troll female#Default.png b/src/images/creatures/Ice troll female#Default.png new file mode 100644 index 0000000..e169765 Binary files /dev/null and b/src/images/creatures/Ice troll female#Default.png differ diff --git a/src/images/creatures/Ice troll grunt#Default.png b/src/images/creatures/Ice troll grunt#Default.png new file mode 100644 index 0000000..369d4a3 Binary files /dev/null and b/src/images/creatures/Ice troll grunt#Default.png differ diff --git a/src/images/creatures/Ice troll male#Default.png b/src/images/creatures/Ice troll male#Default.png new file mode 100644 index 0000000..2e76436 Binary files /dev/null and b/src/images/creatures/Ice troll male#Default.png differ diff --git a/src/images/creatures/Ice troll runt#Default.png b/src/images/creatures/Ice troll runt#Default.png new file mode 100644 index 0000000..9050799 Binary files /dev/null and b/src/images/creatures/Ice troll runt#Default.png differ diff --git a/src/images/creatures/Ice troll#Desert Treasure.png b/src/images/creatures/Ice troll#Desert Treasure.png new file mode 100644 index 0000000..26abd33 Binary files /dev/null and b/src/images/creatures/Ice troll#Desert Treasure.png differ diff --git a/src/images/creatures/Ice troll#Troll Romance.png b/src/images/creatures/Ice troll#Troll Romance.png new file mode 100644 index 0000000..26abd33 Binary files /dev/null and b/src/images/creatures/Ice troll#Troll Romance.png differ diff --git a/src/images/creatures/Ice warrior#Ice Queen's Lair.png b/src/images/creatures/Ice warrior#Ice Queen's Lair.png new file mode 100644 index 0000000..25439ea Binary files /dev/null and b/src/images/creatures/Ice warrior#Ice Queen's Lair.png differ diff --git a/src/images/creatures/Ice warrior#Normal.png b/src/images/creatures/Ice warrior#Normal.png new file mode 100644 index 0000000..b550030 Binary files /dev/null and b/src/images/creatures/Ice warrior#Normal.png differ diff --git a/src/images/creatures/Ice wolf#58.png b/src/images/creatures/Ice wolf#58.png new file mode 100644 index 0000000..522c837 Binary files /dev/null and b/src/images/creatures/Ice wolf#58.png differ diff --git a/src/images/creatures/Ice wolf#72.png b/src/images/creatures/Ice wolf#72.png new file mode 100644 index 0000000..522c837 Binary files /dev/null and b/src/images/creatures/Ice wolf#72.png differ diff --git a/src/images/creatures/Icefiend (Ghorrock)#Default.png b/src/images/creatures/Icefiend (Ghorrock)#Default.png new file mode 100644 index 0000000..5846323 Binary files /dev/null and b/src/images/creatures/Icefiend (Ghorrock)#Default.png differ diff --git a/src/images/creatures/Icefiend#God Wars Dungeon.png b/src/images/creatures/Icefiend#God Wars Dungeon.png new file mode 100644 index 0000000..c391624 Binary files /dev/null and b/src/images/creatures/Icefiend#God Wars Dungeon.png differ diff --git a/src/images/creatures/Icefiend#Ice Mountain (melting).png b/src/images/creatures/Icefiend#Ice Mountain (melting).png new file mode 100644 index 0000000..c391624 Binary files /dev/null and b/src/images/creatures/Icefiend#Ice Mountain (melting).png differ diff --git a/src/images/creatures/Icefiend#Ice Mountain.png b/src/images/creatures/Icefiend#Ice Mountain.png new file mode 100644 index 0000000..c391624 Binary files /dev/null and b/src/images/creatures/Icefiend#Ice Mountain.png differ diff --git a/src/images/creatures/Icelord#melee.png b/src/images/creatures/Icelord#melee.png new file mode 100644 index 0000000..c6d6479 Binary files /dev/null and b/src/images/creatures/Icelord#melee.png differ diff --git a/src/images/creatures/Icelord#ranged.png b/src/images/creatures/Icelord#ranged.png new file mode 100644 index 0000000..c6d6479 Binary files /dev/null and b/src/images/creatures/Icelord#ranged.png differ diff --git a/src/images/creatures/Imp scavenger#Default.png b/src/images/creatures/Imp scavenger#Default.png new file mode 100644 index 0000000..54d8879 Binary files /dev/null and b/src/images/creatures/Imp scavenger#Default.png differ diff --git a/src/images/creatures/Imp#God Wars Dungeon.png b/src/images/creatures/Imp#God Wars Dungeon.png new file mode 100644 index 0000000..a967130 Binary files /dev/null and b/src/images/creatures/Imp#God Wars Dungeon.png differ diff --git a/src/images/creatures/Imp#Normal.png b/src/images/creatures/Imp#Normal.png new file mode 100644 index 0000000..a967130 Binary files /dev/null and b/src/images/creatures/Imp#Normal.png differ diff --git a/src/images/creatures/Imperial mage akh#Default.png b/src/images/creatures/Imperial mage akh#Default.png new file mode 100644 index 0000000..f9e3119 Binary files /dev/null and b/src/images/creatures/Imperial mage akh#Default.png differ diff --git a/src/images/creatures/Imperial ranger akh#Default.png b/src/images/creatures/Imperial ranger akh#Default.png new file mode 100644 index 0000000..010d202 Binary files /dev/null and b/src/images/creatures/Imperial ranger akh#Default.png differ diff --git a/src/images/creatures/Imperial warrior akh#Default.png b/src/images/creatures/Imperial warrior akh#Default.png new file mode 100644 index 0000000..faa81f6 Binary files /dev/null and b/src/images/creatures/Imperial warrior akh#Default.png differ diff --git a/src/images/creatures/Infernal Mage (elite)#Default.png b/src/images/creatures/Infernal Mage (elite)#Default.png new file mode 100644 index 0000000..c9fe205 Binary files /dev/null and b/src/images/creatures/Infernal Mage (elite)#Default.png differ diff --git a/src/images/creatures/Infernal Mage#Default.png b/src/images/creatures/Infernal Mage#Default.png new file mode 100644 index 0000000..c9fe205 Binary files /dev/null and b/src/images/creatures/Infernal Mage#Default.png differ diff --git a/src/images/creatures/Iorwerth guard#Default.png b/src/images/creatures/Iorwerth guard#Default.png new file mode 100644 index 0000000..75f6659 Binary files /dev/null and b/src/images/creatures/Iorwerth guard#Default.png differ diff --git a/src/images/creatures/Iorwerth scout#Default.png b/src/images/creatures/Iorwerth scout#Default.png new file mode 100644 index 0000000..27113b1 Binary files /dev/null and b/src/images/creatures/Iorwerth scout#Default.png differ diff --git a/src/images/creatures/Iron dragon#Default.png b/src/images/creatures/Iron dragon#Default.png new file mode 100644 index 0000000..c206d0c Binary files /dev/null and b/src/images/creatures/Iron dragon#Default.png differ diff --git a/src/images/creatures/Jackal#Default.png b/src/images/creatures/Jackal#Default.png new file mode 100644 index 0000000..dc72d7a Binary files /dev/null and b/src/images/creatures/Jackal#Default.png differ diff --git a/src/images/creatures/Jelly#Default.png b/src/images/creatures/Jelly#Default.png new file mode 100644 index 0000000..9be0e6d Binary files /dev/null and b/src/images/creatures/Jelly#Default.png differ diff --git a/src/images/creatures/Jubbly bird#Default.png b/src/images/creatures/Jubbly bird#Default.png new file mode 100644 index 0000000..ee6817d Binary files /dev/null and b/src/images/creatures/Jubbly bird#Default.png differ diff --git a/src/images/creatures/Jungle Wolf#Default.png b/src/images/creatures/Jungle Wolf#Default.png new file mode 100644 index 0000000..7385e90 Binary files /dev/null and b/src/images/creatures/Jungle Wolf#Default.png differ diff --git a/src/images/creatures/Jungle horror#Default.png b/src/images/creatures/Jungle horror#Default.png new file mode 100644 index 0000000..8186649 Binary files /dev/null and b/src/images/creatures/Jungle horror#Default.png differ diff --git a/src/images/creatures/Jungle spider#Ape Atoll.png b/src/images/creatures/Jungle spider#Ape Atoll.png new file mode 100644 index 0000000..6399bfe Binary files /dev/null and b/src/images/creatures/Jungle spider#Ape Atoll.png differ diff --git a/src/images/creatures/Jungle spider#Common.png b/src/images/creatures/Jungle spider#Common.png new file mode 100644 index 0000000..c06eaca Binary files /dev/null and b/src/images/creatures/Jungle spider#Common.png differ diff --git a/src/images/creatures/Jungle spider#Jade Vine (level 42).png b/src/images/creatures/Jungle spider#Jade Vine (level 42).png new file mode 100644 index 0000000..e857446 Binary files /dev/null and b/src/images/creatures/Jungle spider#Jade Vine (level 42).png differ diff --git a/src/images/creatures/Jungle spider#Jade Vine (level 49).png b/src/images/creatures/Jungle spider#Jade Vine (level 49).png new file mode 100644 index 0000000..e857446 Binary files /dev/null and b/src/images/creatures/Jungle spider#Jade Vine (level 49).png differ diff --git a/src/images/creatures/Jungle spider#Musa Point.png b/src/images/creatures/Jungle spider#Musa Point.png new file mode 100644 index 0000000..c06eaca Binary files /dev/null and b/src/images/creatures/Jungle spider#Musa Point.png differ diff --git a/src/images/creatures/Jungle spider#Tai Bwo Wannai Cleanup.png b/src/images/creatures/Jungle spider#Tai Bwo Wannai Cleanup.png new file mode 100644 index 0000000..c06eaca Binary files /dev/null and b/src/images/creatures/Jungle spider#Tai Bwo Wannai Cleanup.png differ diff --git a/src/images/creatures/Jungle strykewyrm#Default.png b/src/images/creatures/Jungle strykewyrm#Default.png new file mode 100644 index 0000000..b8b299b Binary files /dev/null and b/src/images/creatures/Jungle strykewyrm#Default.png differ diff --git a/src/images/creatures/K'ril Tsutsaroth#Hard mode.png b/src/images/creatures/K'ril Tsutsaroth#Hard mode.png new file mode 100644 index 0000000..e0c330d Binary files /dev/null and b/src/images/creatures/K'ril Tsutsaroth#Hard mode.png differ diff --git a/src/images/creatures/K'ril Tsutsaroth#Normal.png b/src/images/creatures/K'ril Tsutsaroth#Normal.png new file mode 100644 index 0000000..e0c330d Binary files /dev/null and b/src/images/creatures/K'ril Tsutsaroth#Normal.png differ diff --git a/src/images/creatures/K'ril Tsutsaroth#The World Wakes.png b/src/images/creatures/K'ril Tsutsaroth#The World Wakes.png new file mode 100644 index 0000000..ec13f22 Binary files /dev/null and b/src/images/creatures/K'ril Tsutsaroth#The World Wakes.png differ diff --git a/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Bloodchiller.png b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Bloodchiller.png new file mode 100644 index 0000000..969f06b Binary files /dev/null and b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Bloodchiller.png differ diff --git a/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Pummeller.png b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Pummeller.png new file mode 100644 index 0000000..4d805f9 Binary files /dev/null and b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Pummeller.png differ diff --git a/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Riftsplitter.png b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Riftsplitter.png new file mode 100644 index 0000000..51817b4 Binary files /dev/null and b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Riftsplitter.png differ diff --git a/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Warmonger.png b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Warmonger.png new file mode 100644 index 0000000..8b0456a Binary files /dev/null and b/src/images/creatures/Kal'gerion demon (The Shadow Reef)#Warmonger.png differ diff --git a/src/images/creatures/Kal'gerion demon#Bloodchiller.png b/src/images/creatures/Kal'gerion demon#Bloodchiller.png new file mode 100644 index 0000000..969f06b Binary files /dev/null and b/src/images/creatures/Kal'gerion demon#Bloodchiller.png differ diff --git a/src/images/creatures/Kal'gerion demon#Pummeller.png b/src/images/creatures/Kal'gerion demon#Pummeller.png new file mode 100644 index 0000000..4d805f9 Binary files /dev/null and b/src/images/creatures/Kal'gerion demon#Pummeller.png differ diff --git a/src/images/creatures/Kal'gerion demon#Riftsplitter.png b/src/images/creatures/Kal'gerion demon#Riftsplitter.png new file mode 100644 index 0000000..51817b4 Binary files /dev/null and b/src/images/creatures/Kal'gerion demon#Riftsplitter.png differ diff --git a/src/images/creatures/Kal'gerion demon#Rush of Blood.png b/src/images/creatures/Kal'gerion demon#Rush of Blood.png new file mode 100644 index 0000000..969f06b Binary files /dev/null and b/src/images/creatures/Kal'gerion demon#Rush of Blood.png differ diff --git a/src/images/creatures/Kal'gerion demon#Thunderous.png b/src/images/creatures/Kal'gerion demon#Thunderous.png new file mode 100644 index 0000000..bb63a7a Binary files /dev/null and b/src/images/creatures/Kal'gerion demon#Thunderous.png differ diff --git a/src/images/creatures/Kal'gerion demon#Warmonger.png b/src/images/creatures/Kal'gerion demon#Warmonger.png new file mode 100644 index 0000000..8b0456a Binary files /dev/null and b/src/images/creatures/Kal'gerion demon#Warmonger.png differ diff --git a/src/images/creatures/Kalphite Guardian#Default.png b/src/images/creatures/Kalphite Guardian#Default.png new file mode 100644 index 0000000..5a2aaaf Binary files /dev/null and b/src/images/creatures/Kalphite Guardian#Default.png differ diff --git a/src/images/creatures/Kalphite King#Magic.png b/src/images/creatures/Kalphite King#Magic.png new file mode 100644 index 0000000..958b226 Binary files /dev/null and b/src/images/creatures/Kalphite King#Magic.png differ diff --git a/src/images/creatures/Kalphite King#Melee.png b/src/images/creatures/Kalphite King#Melee.png new file mode 100644 index 0000000..af6b812 Binary files /dev/null and b/src/images/creatures/Kalphite King#Melee.png differ diff --git a/src/images/creatures/Kalphite King#Ranged.png b/src/images/creatures/Kalphite King#Ranged.png new file mode 100644 index 0000000..59bbfd2 Binary files /dev/null and b/src/images/creatures/Kalphite King#Ranged.png differ diff --git a/src/images/creatures/Kalphite Queen#First form.png b/src/images/creatures/Kalphite Queen#First form.png new file mode 100644 index 0000000..fb6ea32 Binary files /dev/null and b/src/images/creatures/Kalphite Queen#First form.png differ diff --git a/src/images/creatures/Kalphite Queen#Second form.png b/src/images/creatures/Kalphite Queen#Second form.png new file mode 100644 index 0000000..98c9a68 Binary files /dev/null and b/src/images/creatures/Kalphite Queen#Second form.png differ diff --git a/src/images/creatures/Kalphite Soldier#Default.png b/src/images/creatures/Kalphite Soldier#Default.png new file mode 100644 index 0000000..b7e3642 Binary files /dev/null and b/src/images/creatures/Kalphite Soldier#Default.png differ diff --git a/src/images/creatures/Kalphite Worker#Default.png b/src/images/creatures/Kalphite Worker#Default.png new file mode 100644 index 0000000..57a24ee Binary files /dev/null and b/src/images/creatures/Kalphite Worker#Default.png differ diff --git a/src/images/creatures/Karil the Tainted#Normal.png b/src/images/creatures/Karil the Tainted#Normal.png new file mode 100644 index 0000000..93af2f8 Binary files /dev/null and b/src/images/creatures/Karil the Tainted#Normal.png differ diff --git a/src/images/creatures/Karil the Tainted#Rise of the Six.png b/src/images/creatures/Karil the Tainted#Rise of the Six.png new file mode 100644 index 0000000..747fd49 Binary files /dev/null and b/src/images/creatures/Karil the Tainted#Rise of the Six.png differ diff --git a/src/images/creatures/Kerapac, the bound#Hard mode.png b/src/images/creatures/Kerapac, the bound#Hard mode.png new file mode 100644 index 0000000..036dfc0 Binary files /dev/null and b/src/images/creatures/Kerapac, the bound#Hard mode.png differ diff --git a/src/images/creatures/Kerapac, the bound#Normal mode.png b/src/images/creatures/Kerapac, the bound#Normal mode.png new file mode 100644 index 0000000..036dfc0 Binary files /dev/null and b/src/images/creatures/Kerapac, the bound#Normal mode.png differ diff --git a/src/images/creatures/Killerwatt#Default.png b/src/images/creatures/Killerwatt#Default.png new file mode 100644 index 0000000..7180917 Binary files /dev/null and b/src/images/creatures/Killerwatt#Default.png differ diff --git a/src/images/creatures/King Black Dragon#Default.png b/src/images/creatures/King Black Dragon#Default.png new file mode 100644 index 0000000..0a34263 Binary files /dev/null and b/src/images/creatures/King Black Dragon#Default.png differ diff --git a/src/images/creatures/King Scorpion#Default.png b/src/images/creatures/King Scorpion#Default.png new file mode 100644 index 0000000..a54be5a Binary files /dev/null and b/src/images/creatures/King Scorpion#Default.png differ diff --git a/src/images/creatures/Knight of Ardougne (West Ardougne)#Mourner Tunnels.png b/src/images/creatures/Knight of Ardougne (West Ardougne)#Mourner Tunnels.png new file mode 100644 index 0000000..c7bcdf1 Binary files /dev/null and b/src/images/creatures/Knight of Ardougne (West Ardougne)#Mourner Tunnels.png differ diff --git a/src/images/creatures/Knight of Ardougne (West Ardougne)#Surface.png b/src/images/creatures/Knight of Ardougne (West Ardougne)#Surface.png new file mode 100644 index 0000000..c7bcdf1 Binary files /dev/null and b/src/images/creatures/Knight of Ardougne (West Ardougne)#Surface.png differ diff --git a/src/images/creatures/Kor'Vath the Blightbringer#140,000 life points.png b/src/images/creatures/Kor'Vath the Blightbringer#140,000 life points.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/src/images/creatures/Kor'Vath the Blightbringer#140,000 life points.png differ diff --git a/src/images/creatures/Kor'Vath the Blightbringer#170,000 life points.png b/src/images/creatures/Kor'Vath the Blightbringer#170,000 life points.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/src/images/creatures/Kor'Vath the Blightbringer#170,000 life points.png differ diff --git a/src/images/creatures/Kor'Vath the Blightbringer#400,000 life points.png b/src/images/creatures/Kor'Vath the Blightbringer#400,000 life points.png new file mode 100644 index 0000000..bf4d40b Binary files /dev/null and b/src/images/creatures/Kor'Vath the Blightbringer#400,000 life points.png differ diff --git a/src/images/creatures/Kraka#Default.png b/src/images/creatures/Kraka#Default.png new file mode 100644 index 0000000..1918672 Binary files /dev/null and b/src/images/creatures/Kraka#Default.png differ diff --git a/src/images/creatures/Kree'arra#Hard Mode.png b/src/images/creatures/Kree'arra#Hard Mode.png new file mode 100644 index 0000000..1f73292 Binary files /dev/null and b/src/images/creatures/Kree'arra#Hard Mode.png differ diff --git a/src/images/creatures/Kree'arra#Normal.png b/src/images/creatures/Kree'arra#Normal.png new file mode 100644 index 0000000..1f73292 Binary files /dev/null and b/src/images/creatures/Kree'arra#Normal.png differ diff --git a/src/images/creatures/Kree'arra#The World Wakes.png b/src/images/creatures/Kree'arra#The World Wakes.png new file mode 100644 index 0000000..1f73292 Binary files /dev/null and b/src/images/creatures/Kree'arra#The World Wakes.png differ diff --git a/src/images/creatures/Kurask#Examine #1.png b/src/images/creatures/Kurask#Examine #1.png new file mode 100644 index 0000000..47a0770 Binary files /dev/null and b/src/images/creatures/Kurask#Examine #1.png differ diff --git a/src/images/creatures/Kurask#Examine #2.png b/src/images/creatures/Kurask#Examine #2.png new file mode 100644 index 0000000..47a0770 Binary files /dev/null and b/src/images/creatures/Kurask#Examine #2.png differ diff --git a/src/images/creatures/La'Kalor the Unbroken#Default.png b/src/images/creatures/La'Kalor the Unbroken#Default.png new file mode 100644 index 0000000..6532237 Binary files /dev/null and b/src/images/creatures/La'Kalor the Unbroken#Default.png differ diff --git a/src/images/creatures/Laboratory slime#Adult (normal mode).png b/src/images/creatures/Laboratory slime#Adult (normal mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/src/images/creatures/Laboratory slime#Adult (normal mode).png differ diff --git a/src/images/creatures/Laboratory slime#Adult (story mode).png b/src/images/creatures/Laboratory slime#Adult (story mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/src/images/creatures/Laboratory slime#Adult (story mode).png differ diff --git a/src/images/creatures/Laboratory slime#Spawnling (normal mode).png b/src/images/creatures/Laboratory slime#Spawnling (normal mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/src/images/creatures/Laboratory slime#Spawnling (normal mode).png differ diff --git a/src/images/creatures/Laboratory slime#Spawnling (story mode).png b/src/images/creatures/Laboratory slime#Spawnling (story mode).png new file mode 100644 index 0000000..9710ab6 Binary files /dev/null and b/src/images/creatures/Laboratory slime#Spawnling (story mode).png differ diff --git a/src/images/creatures/Lampenflora#Default.png b/src/images/creatures/Lampenflora#Default.png new file mode 100644 index 0000000..03e5df5 Binary files /dev/null and b/src/images/creatures/Lampenflora#Default.png differ diff --git a/src/images/creatures/Lava spider#Normal mode.png b/src/images/creatures/Lava spider#Normal mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/src/images/creatures/Lava spider#Normal mode.png differ diff --git a/src/images/creatures/Lava spider#Story mode.png b/src/images/creatures/Lava spider#Story mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/src/images/creatures/Lava spider#Story mode.png differ diff --git a/src/images/creatures/Lava strykewyrm (Dragonkin Laboratory)#Default.png b/src/images/creatures/Lava strykewyrm (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..fabdb27 Binary files /dev/null and b/src/images/creatures/Lava strykewyrm (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Lava strykewyrm#Default.png b/src/images/creatures/Lava strykewyrm#Default.png new file mode 100644 index 0000000..fabdb27 Binary files /dev/null and b/src/images/creatures/Lava strykewyrm#Default.png differ diff --git a/src/images/creatures/Legio Primus#Default.png b/src/images/creatures/Legio Primus#Default.png new file mode 100644 index 0000000..8207ebc Binary files /dev/null and b/src/images/creatures/Legio Primus#Default.png differ diff --git a/src/images/creatures/Legio Quartus#Default.png b/src/images/creatures/Legio Quartus#Default.png new file mode 100644 index 0000000..2a07560 Binary files /dev/null and b/src/images/creatures/Legio Quartus#Default.png differ diff --git a/src/images/creatures/Legio Quintus#Default.png b/src/images/creatures/Legio Quintus#Default.png new file mode 100644 index 0000000..8182e59 Binary files /dev/null and b/src/images/creatures/Legio Quintus#Default.png differ diff --git a/src/images/creatures/Legio Secundus#Default.png b/src/images/creatures/Legio Secundus#Default.png new file mode 100644 index 0000000..afb0612 Binary files /dev/null and b/src/images/creatures/Legio Secundus#Default.png differ diff --git a/src/images/creatures/Legio Sextus#Default.png b/src/images/creatures/Legio Sextus#Default.png new file mode 100644 index 0000000..320a009 Binary files /dev/null and b/src/images/creatures/Legio Sextus#Default.png differ diff --git a/src/images/creatures/Legio Tertius#Default.png b/src/images/creatures/Legio Tertius#Default.png new file mode 100644 index 0000000..f3d970a Binary files /dev/null and b/src/images/creatures/Legio Tertius#Default.png differ diff --git a/src/images/creatures/Lesser demon (Wizards' Tower)#Default.png b/src/images/creatures/Lesser demon (Wizards' Tower)#Default.png new file mode 100644 index 0000000..66c80fd Binary files /dev/null and b/src/images/creatures/Lesser demon (Wizards' Tower)#Default.png differ diff --git a/src/images/creatures/Lesser demon#1.png b/src/images/creatures/Lesser demon#1.png new file mode 100644 index 0000000..ef4f9ec Binary files /dev/null and b/src/images/creatures/Lesser demon#1.png differ diff --git a/src/images/creatures/Lesser demon#2.png b/src/images/creatures/Lesser demon#2.png new file mode 100644 index 0000000..bfbbc45 Binary files /dev/null and b/src/images/creatures/Lesser demon#2.png differ diff --git a/src/images/creatures/Lesser demon#3.png b/src/images/creatures/Lesser demon#3.png new file mode 100644 index 0000000..a3bc5bf Binary files /dev/null and b/src/images/creatures/Lesser demon#3.png differ diff --git a/src/images/creatures/Lesser demon#4.png b/src/images/creatures/Lesser demon#4.png new file mode 100644 index 0000000..e8cdb85 Binary files /dev/null and b/src/images/creatures/Lesser demon#4.png differ diff --git a/src/images/creatures/Lesser demon#5.png b/src/images/creatures/Lesser demon#5.png new file mode 100644 index 0000000..b164149 Binary files /dev/null and b/src/images/creatures/Lesser demon#5.png differ diff --git a/src/images/creatures/Linza the Disgraced#Barrows.png b/src/images/creatures/Linza the Disgraced#Barrows.png new file mode 100644 index 0000000..b46a5a8 Binary files /dev/null and b/src/images/creatures/Linza the Disgraced#Barrows.png differ diff --git a/src/images/creatures/Linza the Disgraced#Sliske's Endgame.png b/src/images/creatures/Linza the Disgraced#Sliske's Endgame.png new file mode 100644 index 0000000..b46a5a8 Binary files /dev/null and b/src/images/creatures/Linza the Disgraced#Sliske's Endgame.png differ diff --git a/src/images/creatures/Liverworts#Default.png b/src/images/creatures/Liverworts#Default.png new file mode 100644 index 0000000..1f1ed8b Binary files /dev/null and b/src/images/creatures/Liverworts#Default.png differ diff --git a/src/images/creatures/Living rock patriarch#Default.png b/src/images/creatures/Living rock patriarch#Default.png new file mode 100644 index 0000000..53a3773 Binary files /dev/null and b/src/images/creatures/Living rock patriarch#Default.png differ diff --git a/src/images/creatures/Living rock protector#Default.png b/src/images/creatures/Living rock protector#Default.png new file mode 100644 index 0000000..670832a Binary files /dev/null and b/src/images/creatures/Living rock protector#Default.png differ diff --git a/src/images/creatures/Living rock striker#Default.png b/src/images/creatures/Living rock striker#Default.png new file mode 100644 index 0000000..5a64dd9 Binary files /dev/null and b/src/images/creatures/Living rock striker#Default.png differ diff --git a/src/images/creatures/Lizard#Default.png b/src/images/creatures/Lizard#Default.png new file mode 100644 index 0000000..1f60855 Binary files /dev/null and b/src/images/creatures/Lizard#Default.png differ diff --git a/src/images/creatures/Locust lancer#Default.png b/src/images/creatures/Locust lancer#Default.png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/src/images/creatures/Locust lancer#Default.png differ diff --git a/src/images/creatures/Locust ranger#Default.png b/src/images/creatures/Locust ranger#Default.png new file mode 100644 index 0000000..865dc23 Binary files /dev/null and b/src/images/creatures/Locust ranger#Default.png differ diff --git a/src/images/creatures/Locust rider#Melee (1).png b/src/images/creatures/Locust rider#Melee (1).png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/src/images/creatures/Locust rider#Melee (1).png differ diff --git a/src/images/creatures/Locust rider#Melee (2).png b/src/images/creatures/Locust rider#Melee (2).png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/src/images/creatures/Locust rider#Melee (2).png differ diff --git a/src/images/creatures/Locust rider#Melee (3).png b/src/images/creatures/Locust rider#Melee (3).png new file mode 100644 index 0000000..57e0407 Binary files /dev/null and b/src/images/creatures/Locust rider#Melee (3).png differ diff --git a/src/images/creatures/Locust rider#Range (1).png b/src/images/creatures/Locust rider#Range (1).png new file mode 100644 index 0000000..f69ab10 Binary files /dev/null and b/src/images/creatures/Locust rider#Range (1).png differ diff --git a/src/images/creatures/Locust rider#Range (2).png b/src/images/creatures/Locust rider#Range (2).png new file mode 100644 index 0000000..f69ab10 Binary files /dev/null and b/src/images/creatures/Locust rider#Range (2).png differ diff --git a/src/images/creatures/Locust rider#Range (3).png b/src/images/creatures/Locust rider#Range (3).png new file mode 100644 index 0000000..f69ab10 Binary files /dev/null and b/src/images/creatures/Locust rider#Range (3).png differ diff --git a/src/images/creatures/Luminous snaggler#Default.png b/src/images/creatures/Luminous snaggler#Default.png new file mode 100644 index 0000000..4ed5a43 Binary files /dev/null and b/src/images/creatures/Luminous snaggler#Default.png differ diff --git a/src/images/creatures/Lumpnose#Default.png b/src/images/creatures/Lumpnose#Default.png new file mode 100644 index 0000000..08c188c Binary files /dev/null and b/src/images/creatures/Lumpnose#Default.png differ diff --git a/src/images/creatures/Maelstrom, Raging Waterfiend#Default.png b/src/images/creatures/Maelstrom, Raging Waterfiend#Default.png new file mode 100644 index 0000000..761076c Binary files /dev/null and b/src/images/creatures/Maelstrom, Raging Waterfiend#Default.png differ diff --git a/src/images/creatures/Magic axe#Default.png b/src/images/creatures/Magic axe#Default.png new file mode 100644 index 0000000..9fe8f4d Binary files /dev/null and b/src/images/creatures/Magic axe#Default.png differ diff --git a/src/images/creatures/Manifest shadow#Default.png b/src/images/creatures/Manifest shadow#Default.png new file mode 100644 index 0000000..6676ecb Binary files /dev/null and b/src/images/creatures/Manifest shadow#Default.png differ diff --git a/src/images/creatures/Masuta the Descended#Default.png b/src/images/creatures/Masuta the Descended#Default.png new file mode 100644 index 0000000..cf1b059 Binary files /dev/null and b/src/images/creatures/Masuta the Descended#Default.png differ diff --git a/src/images/creatures/Mature grotworm#Default.png b/src/images/creatures/Mature grotworm#Default.png new file mode 100644 index 0000000..9a4adb9 Binary files /dev/null and b/src/images/creatures/Mature grotworm#Default.png differ diff --git a/src/images/creatures/Mighty banshee#Default.png b/src/images/creatures/Mighty banshee#Default.png new file mode 100644 index 0000000..fc66b91 Binary files /dev/null and b/src/images/creatures/Mighty banshee#Default.png differ diff --git a/src/images/creatures/Minotaur#Level 12.png b/src/images/creatures/Minotaur#Level 12.png new file mode 100644 index 0000000..398d742 Binary files /dev/null and b/src/images/creatures/Minotaur#Level 12.png differ diff --git a/src/images/creatures/Minotaur#Level 15.png b/src/images/creatures/Minotaur#Level 15.png new file mode 100644 index 0000000..398d742 Binary files /dev/null and b/src/images/creatures/Minotaur#Level 15.png differ diff --git a/src/images/creatures/Minotaur#Level 44 (Slayer challenge).png b/src/images/creatures/Minotaur#Level 44 (Slayer challenge).png new file mode 100644 index 0000000..398d742 Binary files /dev/null and b/src/images/creatures/Minotaur#Level 44 (Slayer challenge).png differ diff --git a/src/images/creatures/Mithril dragon#Default.png b/src/images/creatures/Mithril dragon#Default.png new file mode 100644 index 0000000..0c9ea82 Binary files /dev/null and b/src/images/creatures/Mithril dragon#Default.png differ diff --git a/src/images/creatures/Mogre#Default.png b/src/images/creatures/Mogre#Default.png new file mode 100644 index 0000000..eb0c0e7 Binary files /dev/null and b/src/images/creatures/Mogre#Default.png differ diff --git a/src/images/creatures/Molanisk#Default.png b/src/images/creatures/Molanisk#Default.png new file mode 100644 index 0000000..aea76fb Binary files /dev/null and b/src/images/creatures/Molanisk#Default.png differ diff --git a/src/images/creatures/Monkey Zombie#72.png b/src/images/creatures/Monkey Zombie#72.png new file mode 100644 index 0000000..dd6c556 Binary files /dev/null and b/src/images/creatures/Monkey Zombie#72.png differ diff --git a/src/images/creatures/Monkey Zombie#75.png b/src/images/creatures/Monkey Zombie#75.png new file mode 100644 index 0000000..dd6c556 Binary files /dev/null and b/src/images/creatures/Monkey Zombie#75.png differ diff --git a/src/images/creatures/Monkey Zombie#77.png b/src/images/creatures/Monkey Zombie#77.png new file mode 100644 index 0000000..dd6c556 Binary files /dev/null and b/src/images/creatures/Monkey Zombie#77.png differ diff --git a/src/images/creatures/Moss giant#Common (1).png b/src/images/creatures/Moss giant#Common (1).png new file mode 100644 index 0000000..0bd5b32 Binary files /dev/null and b/src/images/creatures/Moss giant#Common (1).png differ diff --git a/src/images/creatures/Moss giant#Common (2).png b/src/images/creatures/Moss giant#Common (2).png new file mode 100644 index 0000000..9d7d3e6 Binary files /dev/null and b/src/images/creatures/Moss giant#Common (2).png differ diff --git a/src/images/creatures/Moss giant#Common (3).png b/src/images/creatures/Moss giant#Common (3).png new file mode 100644 index 0000000..140e2e3 Binary files /dev/null and b/src/images/creatures/Moss giant#Common (3).png differ diff --git a/src/images/creatures/Moss giant#Common (4).png b/src/images/creatures/Moss giant#Common (4).png new file mode 100644 index 0000000..b88fe5e Binary files /dev/null and b/src/images/creatures/Moss giant#Common (4).png differ diff --git a/src/images/creatures/Moss giant#Common (5).png b/src/images/creatures/Moss giant#Common (5).png new file mode 100644 index 0000000..03287b7 Binary files /dev/null and b/src/images/creatures/Moss giant#Common (5).png differ diff --git a/src/images/creatures/Moss giant#Glarial's Tomb.png b/src/images/creatures/Moss giant#Glarial's Tomb.png new file mode 100644 index 0000000..a2ad574 Binary files /dev/null and b/src/images/creatures/Moss giant#Glarial's Tomb.png differ diff --git a/src/images/creatures/Moss golem#Default.png b/src/images/creatures/Moss golem#Default.png new file mode 100644 index 0000000..5ff905a Binary files /dev/null and b/src/images/creatures/Moss golem#Default.png differ diff --git a/src/images/creatures/Mountain troll (well)#Default.png b/src/images/creatures/Mountain troll (well)#Default.png new file mode 100644 index 0000000..6599dec Binary files /dev/null and b/src/images/creatures/Mountain troll (well)#Default.png differ diff --git a/src/images/creatures/Mountain troll#Default.png b/src/images/creatures/Mountain troll#Default.png new file mode 100644 index 0000000..6599dec Binary files /dev/null and b/src/images/creatures/Mountain troll#Default.png differ diff --git a/src/images/creatures/Mounted terrorbird gnome#Level 46.png b/src/images/creatures/Mounted terrorbird gnome#Level 46.png new file mode 100644 index 0000000..2889015 Binary files /dev/null and b/src/images/creatures/Mounted terrorbird gnome#Level 46.png differ diff --git a/src/images/creatures/Mounted terrorbird gnome#Level 53.png b/src/images/creatures/Mounted terrorbird gnome#Level 53.png new file mode 100644 index 0000000..2889015 Binary files /dev/null and b/src/images/creatures/Mounted terrorbird gnome#Level 53.png differ diff --git a/src/images/creatures/Mourner (Mourner Tunnels)#Default.png b/src/images/creatures/Mourner (Mourner Tunnels)#Default.png new file mode 100644 index 0000000..62e4a8e Binary files /dev/null and b/src/images/creatures/Mourner (Mourner Tunnels)#Default.png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#1 (on fire).png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#1 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#1 (on fire).png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#1.png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#1.png new file mode 100644 index 0000000..e33c4f2 Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#1.png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#2 (on fire).png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#2 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#2 (on fire).png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#2.png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#2.png new file mode 100644 index 0000000..6c385e7 Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#2.png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#3 (on fire).png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#3 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#3 (on fire).png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#3.png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#3.png new file mode 100644 index 0000000..8cdab8b Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#3.png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#4 (on fire).png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#4 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#4 (on fire).png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#4.png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#4.png new file mode 100644 index 0000000..4aa2b3f Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#4.png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#Ashes.png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#Ashes.png new file mode 100644 index 0000000..827357d Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#Ashes.png differ diff --git a/src/images/creatures/Mummy (Jaldraocht Pyramid)#Jaldraocht sarcophagus.png b/src/images/creatures/Mummy (Jaldraocht Pyramid)#Jaldraocht sarcophagus.png new file mode 100644 index 0000000..31d1e91 Binary files /dev/null and b/src/images/creatures/Mummy (Jaldraocht Pyramid)#Jaldraocht sarcophagus.png differ diff --git a/src/images/creatures/Mummy (Ullek)#1 (on fire).png b/src/images/creatures/Mummy (Ullek)#1 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#1 (on fire).png differ diff --git a/src/images/creatures/Mummy (Ullek)#1.png b/src/images/creatures/Mummy (Ullek)#1.png new file mode 100644 index 0000000..e33c4f2 Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#1.png differ diff --git a/src/images/creatures/Mummy (Ullek)#2 (on fire).png b/src/images/creatures/Mummy (Ullek)#2 (on fire).png new file mode 100644 index 0000000..31cc66e Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#2 (on fire).png differ diff --git a/src/images/creatures/Mummy (Ullek)#2.png b/src/images/creatures/Mummy (Ullek)#2.png new file mode 100644 index 0000000..6c385e7 Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#2.png differ diff --git a/src/images/creatures/Mummy (Ullek)#3 (on fire).png b/src/images/creatures/Mummy (Ullek)#3 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#3 (on fire).png differ diff --git a/src/images/creatures/Mummy (Ullek)#3.png b/src/images/creatures/Mummy (Ullek)#3.png new file mode 100644 index 0000000..8cdab8b Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#3.png differ diff --git a/src/images/creatures/Mummy (Ullek)#4 (on fire).png b/src/images/creatures/Mummy (Ullek)#4 (on fire).png new file mode 100644 index 0000000..4092806 Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#4 (on fire).png differ diff --git a/src/images/creatures/Mummy (Ullek)#4.png b/src/images/creatures/Mummy (Ullek)#4.png new file mode 100644 index 0000000..4aa2b3f Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#4.png differ diff --git a/src/images/creatures/Mummy (Ullek)#Ashes.png b/src/images/creatures/Mummy (Ullek)#Ashes.png new file mode 100644 index 0000000..827357d Binary files /dev/null and b/src/images/creatures/Mummy (Ullek)#Ashes.png differ diff --git a/src/images/creatures/Mutated bloodveld#A.png b/src/images/creatures/Mutated bloodveld#A.png new file mode 100644 index 0000000..ee6e495 Binary files /dev/null and b/src/images/creatures/Mutated bloodveld#A.png differ diff --git a/src/images/creatures/Mutated bloodveld#B.png b/src/images/creatures/Mutated bloodveld#B.png new file mode 100644 index 0000000..031707e Binary files /dev/null and b/src/images/creatures/Mutated bloodveld#B.png differ diff --git a/src/images/creatures/Mutated jadinko baby#Default.png b/src/images/creatures/Mutated jadinko baby#Default.png new file mode 100644 index 0000000..8b2ca1f Binary files /dev/null and b/src/images/creatures/Mutated jadinko baby#Default.png differ diff --git a/src/images/creatures/Mutated jadinko guard#Default.png b/src/images/creatures/Mutated jadinko guard#Default.png new file mode 100644 index 0000000..faf8d6e Binary files /dev/null and b/src/images/creatures/Mutated jadinko guard#Default.png differ diff --git a/src/images/creatures/Mutated jadinko male#Default.png b/src/images/creatures/Mutated jadinko male#Default.png new file mode 100644 index 0000000..eaf6f90 Binary files /dev/null and b/src/images/creatures/Mutated jadinko male#Default.png differ diff --git a/src/images/creatures/Mutated zygomite#Level 58.png b/src/images/creatures/Mutated zygomite#Level 58.png new file mode 100644 index 0000000..bf890c1 Binary files /dev/null and b/src/images/creatures/Mutated zygomite#Level 58.png differ diff --git a/src/images/creatures/Mutated zygomite#Level 65.png b/src/images/creatures/Mutated zygomite#Level 65.png new file mode 100644 index 0000000..bf890c1 Binary files /dev/null and b/src/images/creatures/Mutated zygomite#Level 65.png differ diff --git a/src/images/creatures/Nechryael (Heart of Gielinor)#Default.png b/src/images/creatures/Nechryael (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..f0eb8a4 Binary files /dev/null and b/src/images/creatures/Nechryael (Heart of Gielinor)#Default.png differ diff --git a/src/images/creatures/Nechryael (elite)#Default.png b/src/images/creatures/Nechryael (elite)#Default.png new file mode 100644 index 0000000..8b8f9ec Binary files /dev/null and b/src/images/creatures/Nechryael (elite)#Default.png differ diff --git a/src/images/creatures/Nechryael#Default.png b/src/images/creatures/Nechryael#Default.png new file mode 100644 index 0000000..8b8f9ec Binary files /dev/null and b/src/images/creatures/Nechryael#Default.png differ diff --git a/src/images/creatures/Nex b/src/images/creatures/Nex new file mode 100644 index 0000000..e69de29 diff --git a/src/images/creatures/Nex#Magic.png b/src/images/creatures/Nex#Magic.png new file mode 100644 index 0000000..e6c8d67 Binary files /dev/null and b/src/images/creatures/Nex#Magic.png differ diff --git a/src/images/creatures/Nex#Melee.png b/src/images/creatures/Nex#Melee.png new file mode 100644 index 0000000..b57670c Binary files /dev/null and b/src/images/creatures/Nex#Melee.png differ diff --git a/src/images/creatures/Nex#Ranged.png b/src/images/creatures/Nex#Ranged.png new file mode 100644 index 0000000..9492dde Binary files /dev/null and b/src/images/creatures/Nex#Ranged.png differ diff --git a/src/images/creatures/Nex#Standard.png b/src/images/creatures/Nex#Standard.png new file mode 100644 index 0000000..cd0e5a0 Binary files /dev/null and b/src/images/creatures/Nex#Standard.png differ diff --git a/src/images/creatures/Nightmare#Default.png b/src/images/creatures/Nightmare#Default.png new file mode 100644 index 0000000..110a416 Binary files /dev/null and b/src/images/creatures/Nightmare#Default.png differ diff --git a/src/images/creatures/Nodon artificer#Default.png b/src/images/creatures/Nodon artificer#Default.png new file mode 100644 index 0000000..042a781 Binary files /dev/null and b/src/images/creatures/Nodon artificer#Default.png differ diff --git a/src/images/creatures/Nodon enforcer#Default.png b/src/images/creatures/Nodon enforcer#Default.png new file mode 100644 index 0000000..69af25d Binary files /dev/null and b/src/images/creatures/Nodon enforcer#Default.png differ diff --git a/src/images/creatures/Nodon engineer#Default.png b/src/images/creatures/Nodon engineer#Default.png new file mode 100644 index 0000000..7f5fe76 Binary files /dev/null and b/src/images/creatures/Nodon engineer#Default.png differ diff --git a/src/images/creatures/Nodon guard#Default.png b/src/images/creatures/Nodon guard#Default.png new file mode 100644 index 0000000..b3366b3 Binary files /dev/null and b/src/images/creatures/Nodon guard#Default.png differ diff --git a/src/images/creatures/Nodon hunter#Default.png b/src/images/creatures/Nodon hunter#Default.png new file mode 100644 index 0000000..7d98b83 Binary files /dev/null and b/src/images/creatures/Nodon hunter#Default.png differ diff --git a/src/images/creatures/Nymora, the Vengeful#Challenge Mode.png b/src/images/creatures/Nymora, the Vengeful#Challenge Mode.png new file mode 100644 index 0000000..33e7244 Binary files /dev/null and b/src/images/creatures/Nymora, the Vengeful#Challenge Mode.png differ diff --git a/src/images/creatures/Nymora, the Vengeful#Normal Mode.png b/src/images/creatures/Nymora, the Vengeful#Normal Mode.png new file mode 100644 index 0000000..33e7244 Binary files /dev/null and b/src/images/creatures/Nymora, the Vengeful#Normal Mode.png differ diff --git a/src/images/creatures/Ogre chieftain#Version 1.png b/src/images/creatures/Ogre chieftain#Version 1.png new file mode 100644 index 0000000..0d7f692 Binary files /dev/null and b/src/images/creatures/Ogre chieftain#Version 1.png differ diff --git a/src/images/creatures/Ogre chieftain#Version 2.png b/src/images/creatures/Ogre chieftain#Version 2.png new file mode 100644 index 0000000..621cf11 Binary files /dev/null and b/src/images/creatures/Ogre chieftain#Version 2.png differ diff --git a/src/images/creatures/Ogre chieftain#Version 3.png b/src/images/creatures/Ogre chieftain#Version 3.png new file mode 100644 index 0000000..621cf11 Binary files /dev/null and b/src/images/creatures/Ogre chieftain#Version 3.png differ diff --git a/src/images/creatures/Ogre#Combat Camp(56).png b/src/images/creatures/Ogre#Combat Camp(56).png new file mode 100644 index 0000000..afb08ea Binary files /dev/null and b/src/images/creatures/Ogre#Combat Camp(56).png differ diff --git a/src/images/creatures/Ogre#God Wars Dungeon(86).png b/src/images/creatures/Ogre#God Wars Dungeon(86).png new file mode 100644 index 0000000..f0570ca Binary files /dev/null and b/src/images/creatures/Ogre#God Wars Dungeon(86).png differ diff --git a/src/images/creatures/Ogre#Kandarin(Level 67).png b/src/images/creatures/Ogre#Kandarin(Level 67).png new file mode 100644 index 0000000..4fd1cfa Binary files /dev/null and b/src/images/creatures/Ogre#Kandarin(Level 67).png differ diff --git a/src/images/creatures/Ogress champion#Default.png b/src/images/creatures/Ogress champion#Default.png new file mode 100644 index 0000000..97da5b7 Binary files /dev/null and b/src/images/creatures/Ogress champion#Default.png differ diff --git a/src/images/creatures/Ogress warrior#Default.png b/src/images/creatures/Ogress warrior#Default.png new file mode 100644 index 0000000..e68d431 Binary files /dev/null and b/src/images/creatures/Ogress warrior#Default.png differ diff --git a/src/images/creatures/Ogress#Default.png b/src/images/creatures/Ogress#Default.png new file mode 100644 index 0000000..5f0e961 Binary files /dev/null and b/src/images/creatures/Ogress#Default.png differ diff --git a/src/images/creatures/Ol' Sawtooth#Default.png b/src/images/creatures/Ol' Sawtooth#Default.png new file mode 100644 index 0000000..ac25e9f Binary files /dev/null and b/src/images/creatures/Ol' Sawtooth#Default.png differ diff --git a/src/images/creatures/Onyx dragon (Dragonkin Laboratory)#Default.png b/src/images/creatures/Onyx dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..3fbf36d Binary files /dev/null and b/src/images/creatures/Onyx dragon (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Onyx dragon#Default.png b/src/images/creatures/Onyx dragon#Default.png new file mode 100644 index 0000000..3fbf36d Binary files /dev/null and b/src/images/creatures/Onyx dragon#Default.png differ diff --git a/src/images/creatures/Oomlie bird#Default.png b/src/images/creatures/Oomlie bird#Default.png new file mode 100644 index 0000000..4253331 Binary files /dev/null and b/src/images/creatures/Oomlie bird#Default.png differ diff --git a/src/images/creatures/Oreb, the Magister#Default.png b/src/images/creatures/Oreb, the Magister#Default.png new file mode 100644 index 0000000..64b21a8 Binary files /dev/null and b/src/images/creatures/Oreb, the Magister#Default.png differ diff --git a/src/images/creatures/Orikalka#Default.png b/src/images/creatures/Orikalka#Default.png new file mode 100644 index 0000000..3cf47a0 Binary files /dev/null and b/src/images/creatures/Orikalka#Default.png differ diff --git a/src/images/creatures/Osseous#Default.png b/src/images/creatures/Osseous#Default.png new file mode 100644 index 0000000..1471e99 Binary files /dev/null and b/src/images/creatures/Osseous#Default.png differ diff --git a/src/images/creatures/Otherworldly being#Default.png b/src/images/creatures/Otherworldly being#Default.png new file mode 100644 index 0000000..dad9d60 Binary files /dev/null and b/src/images/creatures/Otherworldly being#Default.png differ diff --git a/src/images/creatures/Pee Hat#Default.png b/src/images/creatures/Pee Hat#Default.png new file mode 100644 index 0000000..20ccdf4 Binary files /dev/null and b/src/images/creatures/Pee Hat#Default.png differ diff --git a/src/images/creatures/Pekin#Default.png b/src/images/creatures/Pekin#Default.png new file mode 100644 index 0000000..7fe489e Binary files /dev/null and b/src/images/creatures/Pekin#Default.png differ diff --git a/src/images/creatures/Penguin (monster)#Default.png b/src/images/creatures/Penguin (monster)#Default.png new file mode 100644 index 0000000..6ebc3a2 Binary files /dev/null and b/src/images/creatures/Penguin (monster)#Default.png differ diff --git a/src/images/creatures/Pernicious parrot#Default.png b/src/images/creatures/Pernicious parrot#Default.png new file mode 100644 index 0000000..4520900 Binary files /dev/null and b/src/images/creatures/Pernicious parrot#Default.png differ diff --git a/src/images/creatures/Phantom sorcerer#1 (Ancient Awakening).png b/src/images/creatures/Phantom sorcerer#1 (Ancient Awakening).png new file mode 100644 index 0000000..9eea1e4 Binary files /dev/null and b/src/images/creatures/Phantom sorcerer#1 (Ancient Awakening).png differ diff --git a/src/images/creatures/Phantom sorcerer#1 (hard Ungael combat activity).png b/src/images/creatures/Phantom sorcerer#1 (hard Ungael combat activity).png new file mode 100644 index 0000000..f9124eb Binary files /dev/null and b/src/images/creatures/Phantom sorcerer#1 (hard Ungael combat activity).png differ diff --git a/src/images/creatures/Phantom sorcerer#1 (standard Ungael combat activity).png b/src/images/creatures/Phantom sorcerer#1 (standard Ungael combat activity).png new file mode 100644 index 0000000..f9124eb Binary files /dev/null and b/src/images/creatures/Phantom sorcerer#1 (standard Ungael combat activity).png differ diff --git a/src/images/creatures/Phantom wizard#1 (Ancient Awakening).png b/src/images/creatures/Phantom wizard#1 (Ancient Awakening).png new file mode 100644 index 0000000..fa7a657 Binary files /dev/null and b/src/images/creatures/Phantom wizard#1 (Ancient Awakening).png differ diff --git a/src/images/creatures/Phantom wizard#1 (Ungael combat activity).png b/src/images/creatures/Phantom wizard#1 (Ungael combat activity).png new file mode 100644 index 0000000..fa7a657 Binary files /dev/null and b/src/images/creatures/Phantom wizard#1 (Ungael combat activity).png differ diff --git a/src/images/creatures/Pit Scorpion#Default.png b/src/images/creatures/Pit Scorpion#Default.png new file mode 100644 index 0000000..ca4041e Binary files /dev/null and b/src/images/creatures/Pit Scorpion#Default.png differ diff --git a/src/images/creatures/Plague frog#Default.png b/src/images/creatures/Plague frog#Default.png new file mode 100644 index 0000000..f2e9197 Binary files /dev/null and b/src/images/creatures/Plague frog#Default.png differ diff --git a/src/images/creatures/Poison Scorpion#Default.png b/src/images/creatures/Poison Scorpion#Default.png new file mode 100644 index 0000000..0b747b6 Binary files /dev/null and b/src/images/creatures/Poison Scorpion#Default.png differ diff --git a/src/images/creatures/Poison spider#Common.png b/src/images/creatures/Poison spider#Common.png new file mode 100644 index 0000000..d8bf00c Binary files /dev/null and b/src/images/creatures/Poison spider#Common.png differ diff --git a/src/images/creatures/Poison spider#Observatory.png b/src/images/creatures/Poison spider#Observatory.png new file mode 100644 index 0000000..d8bf00c Binary files /dev/null and b/src/images/creatures/Poison spider#Observatory.png differ diff --git a/src/images/creatures/Possessed pickaxe (Lava Flow Mine)#Default.png b/src/images/creatures/Possessed pickaxe (Lava Flow Mine)#Default.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/src/images/creatures/Possessed pickaxe (Lava Flow Mine)#Default.png differ diff --git a/src/images/creatures/Possessed pickaxe#Abandoned Mine.png b/src/images/creatures/Possessed pickaxe#Abandoned Mine.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/src/images/creatures/Possessed pickaxe#Abandoned Mine.png differ diff --git a/src/images/creatures/Possessed pickaxe#Dominion Tower.png b/src/images/creatures/Possessed pickaxe#Dominion Tower.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/src/images/creatures/Possessed pickaxe#Dominion Tower.png differ diff --git a/src/images/creatures/Possessed pickaxe#Lair of Tarn Razorlor.png b/src/images/creatures/Possessed pickaxe#Lair of Tarn Razorlor.png new file mode 100644 index 0000000..f6f9387 Binary files /dev/null and b/src/images/creatures/Possessed pickaxe#Lair of Tarn Razorlor.png differ diff --git a/src/images/creatures/Pthentraken#Default.png b/src/images/creatures/Pthentraken#Default.png new file mode 100644 index 0000000..3c3d02a Binary files /dev/null and b/src/images/creatures/Pthentraken#Default.png differ diff --git a/src/images/creatures/Pyrefiend (The Zamorakian Undercity)#Default.png b/src/images/creatures/Pyrefiend (The Zamorakian Undercity)#Default.png new file mode 100644 index 0000000..277cc93 Binary files /dev/null and b/src/images/creatures/Pyrefiend (The Zamorakian Undercity)#Default.png differ diff --git a/src/images/creatures/Pyrefiend (summoned)#Default.png b/src/images/creatures/Pyrefiend (summoned)#Default.png new file mode 100644 index 0000000..90e4b78 Binary files /dev/null and b/src/images/creatures/Pyrefiend (summoned)#Default.png differ diff --git a/src/images/creatures/Pyrefiend#God Wars Dungeon.png b/src/images/creatures/Pyrefiend#God Wars Dungeon.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/src/images/creatures/Pyrefiend#God Wars Dungeon.png differ diff --git a/src/images/creatures/Pyrefiend#Level 38.png b/src/images/creatures/Pyrefiend#Level 38.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/src/images/creatures/Pyrefiend#Level 38.png differ diff --git a/src/images/creatures/Queen Black Dragon#Carapace.png b/src/images/creatures/Queen Black Dragon#Carapace.png new file mode 100644 index 0000000..e909655 Binary files /dev/null and b/src/images/creatures/Queen Black Dragon#Carapace.png differ diff --git a/src/images/creatures/Queen Black Dragon#Crystal.png b/src/images/creatures/Queen Black Dragon#Crystal.png new file mode 100644 index 0000000..a54f4e6 Binary files /dev/null and b/src/images/creatures/Queen Black Dragon#Crystal.png differ diff --git a/src/images/creatures/Queen Black Dragon#Normal.png b/src/images/creatures/Queen Black Dragon#Normal.png new file mode 100644 index 0000000..5aaee7f Binary files /dev/null and b/src/images/creatures/Queen Black Dragon#Normal.png differ diff --git a/src/images/creatures/Quetzathog#Default.png b/src/images/creatures/Quetzathog#Default.png new file mode 100644 index 0000000..8c5cc99 Binary files /dev/null and b/src/images/creatures/Quetzathog#Default.png differ diff --git a/src/images/creatures/Raksha, the Shadow Colossus#During fight (duo).png b/src/images/creatures/Raksha, the Shadow Colossus#During fight (duo).png new file mode 100644 index 0000000..39c622c Binary files /dev/null and b/src/images/creatures/Raksha, the Shadow Colossus#During fight (duo).png differ diff --git a/src/images/creatures/Raksha, the Shadow Colossus#During fight.png b/src/images/creatures/Raksha, the Shadow Colossus#During fight.png new file mode 100644 index 0000000..39c622c Binary files /dev/null and b/src/images/creatures/Raksha, the Shadow Colossus#During fight.png differ diff --git a/src/images/creatures/Raksha, the Shadow Colossus#Shackled.png b/src/images/creatures/Raksha, the Shadow Colossus#Shackled.png new file mode 100644 index 0000000..1b408df Binary files /dev/null and b/src/images/creatures/Raksha, the Shadow Colossus#Shackled.png differ diff --git a/src/images/creatures/Raksha, the Shadow Colossus#Subdued.png b/src/images/creatures/Raksha, the Shadow Colossus#Subdued.png new file mode 100644 index 0000000..bd4de47 Binary files /dev/null and b/src/images/creatures/Raksha, the Shadow Colossus#Subdued.png differ diff --git a/src/images/creatures/Rasial, the First Necromancer#Alpha vs Omega.png b/src/images/creatures/Rasial, the First Necromancer#Alpha vs Omega.png new file mode 100644 index 0000000..8b95c2a Binary files /dev/null and b/src/images/creatures/Rasial, the First Necromancer#Alpha vs Omega.png differ diff --git a/src/images/creatures/Rasial, the First Necromancer#Normal.png b/src/images/creatures/Rasial, the First Necromancer#Normal.png new file mode 100644 index 0000000..8b95c2a Binary files /dev/null and b/src/images/creatures/Rasial, the First Necromancer#Normal.png differ diff --git a/src/images/creatures/Rat#Common.png b/src/images/creatures/Rat#Common.png new file mode 100644 index 0000000..803a17c Binary files /dev/null and b/src/images/creatures/Rat#Common.png differ diff --git a/src/images/creatures/Rat#Ratcatchers.png b/src/images/creatures/Rat#Ratcatchers.png new file mode 100644 index 0000000..803a17c Binary files /dev/null and b/src/images/creatures/Rat#Ratcatchers.png differ diff --git a/src/images/creatures/Rat#Stronghold of Security.png b/src/images/creatures/Rat#Stronghold of Security.png new file mode 100644 index 0000000..2cd7337 Binary files /dev/null and b/src/images/creatures/Rat#Stronghold of Security.png differ diff --git a/src/images/creatures/Rathis#Default.png b/src/images/creatures/Rathis#Default.png new file mode 100644 index 0000000..7eecd86 Binary files /dev/null and b/src/images/creatures/Rathis#Default.png differ diff --git a/src/images/creatures/Ravenous ghoul (Mazchna)#Default.png b/src/images/creatures/Ravenous ghoul (Mazchna)#Default.png new file mode 100644 index 0000000..3655789 Binary files /dev/null and b/src/images/creatures/Ravenous ghoul (Mazchna)#Default.png differ diff --git a/src/images/creatures/Ravenous ghoul#Default.png b/src/images/creatures/Ravenous ghoul#Default.png new file mode 100644 index 0000000..9c0a459 Binary files /dev/null and b/src/images/creatures/Ravenous ghoul#Default.png differ diff --git a/src/images/creatures/Red dragon (Dragonkin Laboratory)#Default.png b/src/images/creatures/Red dragon (Dragonkin Laboratory)#Default.png new file mode 100644 index 0000000..f5ef71b Binary files /dev/null and b/src/images/creatures/Red dragon (Dragonkin Laboratory)#Default.png differ diff --git a/src/images/creatures/Red dragon#1.png b/src/images/creatures/Red dragon#1.png new file mode 100644 index 0000000..4d20989 Binary files /dev/null and b/src/images/creatures/Red dragon#1.png differ diff --git a/src/images/creatures/Red dragon#2.png b/src/images/creatures/Red dragon#2.png new file mode 100644 index 0000000..08258c4 Binary files /dev/null and b/src/images/creatures/Red dragon#2.png differ diff --git a/src/images/creatures/Red dragon#3.png b/src/images/creatures/Red dragon#3.png new file mode 100644 index 0000000..a031dd1 Binary files /dev/null and b/src/images/creatures/Red dragon#3.png differ diff --git a/src/images/creatures/Red dragon#4.png b/src/images/creatures/Red dragon#4.png new file mode 100644 index 0000000..b9ac714 Binary files /dev/null and b/src/images/creatures/Red dragon#4.png differ diff --git a/src/images/creatures/Red dragon#5.png b/src/images/creatures/Red dragon#5.png new file mode 100644 index 0000000..e4912e6 Binary files /dev/null and b/src/images/creatures/Red dragon#5.png differ diff --git a/src/images/creatures/Revenant cyclops#Default.png b/src/images/creatures/Revenant cyclops#Default.png new file mode 100644 index 0000000..29b732d Binary files /dev/null and b/src/images/creatures/Revenant cyclops#Default.png differ diff --git a/src/images/creatures/Revenant dark beast#Default.png b/src/images/creatures/Revenant dark beast#Default.png new file mode 100644 index 0000000..c3b002b Binary files /dev/null and b/src/images/creatures/Revenant dark beast#Default.png differ diff --git a/src/images/creatures/Revenant demon#Default.png b/src/images/creatures/Revenant demon#Default.png new file mode 100644 index 0000000..114a3e6 Binary files /dev/null and b/src/images/creatures/Revenant demon#Default.png differ diff --git a/src/images/creatures/Revenant dragon#Default.png b/src/images/creatures/Revenant dragon#Default.png new file mode 100644 index 0000000..eead49e Binary files /dev/null and b/src/images/creatures/Revenant dragon#Default.png differ diff --git a/src/images/creatures/Revenant goblin#16.png b/src/images/creatures/Revenant goblin#16.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/src/images/creatures/Revenant goblin#16.png differ diff --git a/src/images/creatures/Revenant goblin#19.png b/src/images/creatures/Revenant goblin#19.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/src/images/creatures/Revenant goblin#19.png differ diff --git a/src/images/creatures/Revenant goblin#22.png b/src/images/creatures/Revenant goblin#22.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/src/images/creatures/Revenant goblin#22.png differ diff --git a/src/images/creatures/Revenant goblin#28.png b/src/images/creatures/Revenant goblin#28.png new file mode 100644 index 0000000..9dd2202 Binary files /dev/null and b/src/images/creatures/Revenant goblin#28.png differ diff --git a/src/images/creatures/Revenant hellhound#Default.png b/src/images/creatures/Revenant hellhound#Default.png new file mode 100644 index 0000000..515fc2c Binary files /dev/null and b/src/images/creatures/Revenant hellhound#Default.png differ diff --git a/src/images/creatures/Revenant hobgoblin#Default.png b/src/images/creatures/Revenant hobgoblin#Default.png new file mode 100644 index 0000000..09b447c Binary files /dev/null and b/src/images/creatures/Revenant hobgoblin#Default.png differ diff --git a/src/images/creatures/Revenant icefiend#Default.png b/src/images/creatures/Revenant icefiend#Default.png new file mode 100644 index 0000000..02878a1 Binary files /dev/null and b/src/images/creatures/Revenant icefiend#Default.png differ diff --git a/src/images/creatures/Revenant imp#Default.png b/src/images/creatures/Revenant imp#Default.png new file mode 100644 index 0000000..1cf1003 Binary files /dev/null and b/src/images/creatures/Revenant imp#Default.png differ diff --git a/src/images/creatures/Revenant knight#Default.png b/src/images/creatures/Revenant knight#Default.png new file mode 100644 index 0000000..40d75f2 Binary files /dev/null and b/src/images/creatures/Revenant knight#Default.png differ diff --git a/src/images/creatures/Revenant ork#Default.png b/src/images/creatures/Revenant ork#Default.png new file mode 100644 index 0000000..0d8762b Binary files /dev/null and b/src/images/creatures/Revenant ork#Default.png differ diff --git a/src/images/creatures/Revenant pyrefiend#Default.png b/src/images/creatures/Revenant pyrefiend#Default.png new file mode 100644 index 0000000..356a29e Binary files /dev/null and b/src/images/creatures/Revenant pyrefiend#Default.png differ diff --git a/src/images/creatures/Revenant vampyre#Default.png b/src/images/creatures/Revenant vampyre#Default.png new file mode 100644 index 0000000..766ab2e Binary files /dev/null and b/src/images/creatures/Revenant vampyre#Default.png differ diff --git a/src/images/creatures/Revenant werewolf#Default.png b/src/images/creatures/Revenant werewolf#Default.png new file mode 100644 index 0000000..cf4acc5 Binary files /dev/null and b/src/images/creatures/Revenant werewolf#Default.png differ diff --git a/src/images/creatures/Ripper Demon#Default.png b/src/images/creatures/Ripper Demon#Default.png new file mode 100644 index 0000000..2d3e248 Binary files /dev/null and b/src/images/creatures/Ripper Demon#Default.png differ diff --git a/src/images/creatures/Ripper dinosaur#Dinosaur invasion.png b/src/images/creatures/Ripper dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..9d0362b Binary files /dev/null and b/src/images/creatures/Ripper dinosaur#Dinosaur invasion.png differ diff --git a/src/images/creatures/Ripper dinosaur#Normal.png b/src/images/creatures/Ripper dinosaur#Normal.png new file mode 100644 index 0000000..9d0362b Binary files /dev/null and b/src/images/creatures/Ripper dinosaur#Normal.png differ diff --git a/src/images/creatures/Risen ghost#Default.png b/src/images/creatures/Risen ghost#Default.png new file mode 100644 index 0000000..53220d3 Binary files /dev/null and b/src/images/creatures/Risen ghost#Default.png differ diff --git a/src/images/creatures/River troll#Default.png b/src/images/creatures/River troll#Default.png new file mode 100644 index 0000000..4cfc7e3 Binary files /dev/null and b/src/images/creatures/River troll#Default.png differ diff --git a/src/images/creatures/Rock (monster)#Default.png b/src/images/creatures/Rock (monster)#Default.png new file mode 100644 index 0000000..a3833fb Binary files /dev/null and b/src/images/creatures/Rock (monster)#Default.png differ diff --git a/src/images/creatures/Rock slug#Default.png b/src/images/creatures/Rock slug#Default.png new file mode 100644 index 0000000..f319e48 Binary files /dev/null and b/src/images/creatures/Rock slug#Default.png differ diff --git a/src/images/creatures/Rooster#Default.png b/src/images/creatures/Rooster#Default.png new file mode 100644 index 0000000..baf2a49 Binary files /dev/null and b/src/images/creatures/Rooster#Default.png differ diff --git a/src/images/creatures/Rorarius#1.png b/src/images/creatures/Rorarius#1.png new file mode 100644 index 0000000..333dee8 Binary files /dev/null and b/src/images/creatures/Rorarius#1.png differ diff --git a/src/images/creatures/Rorarius#2.png b/src/images/creatures/Rorarius#2.png new file mode 100644 index 0000000..edd0ea7 Binary files /dev/null and b/src/images/creatures/Rorarius#2.png differ diff --git a/src/images/creatures/Rune dragon#Armoured.png b/src/images/creatures/Rune dragon#Armoured.png new file mode 100644 index 0000000..a67c163 Binary files /dev/null and b/src/images/creatures/Rune dragon#Armoured.png differ diff --git a/src/images/creatures/Rune dragon#Unarmoured.png b/src/images/creatures/Rune dragon#Unarmoured.png new file mode 100644 index 0000000..3be7130 Binary files /dev/null and b/src/images/creatures/Rune dragon#Unarmoured.png differ diff --git a/src/images/creatures/Salawa akh#Default.png b/src/images/creatures/Salawa akh#Default.png new file mode 100644 index 0000000..6364b5c Binary files /dev/null and b/src/images/creatures/Salawa akh#Default.png differ diff --git a/src/images/creatures/Sangri the Red#Default.png b/src/images/creatures/Sangri the Red#Default.png new file mode 100644 index 0000000..f5ef71b Binary files /dev/null and b/src/images/creatures/Sangri the Red#Default.png differ diff --git a/src/images/creatures/Sapping glacyte#Default.png b/src/images/creatures/Sapping glacyte#Default.png new file mode 100644 index 0000000..602995d Binary files /dev/null and b/src/images/creatures/Sapping glacyte#Default.png differ diff --git a/src/images/creatures/Scabaras lancer#Default.png b/src/images/creatures/Scabaras lancer#Default.png new file mode 100644 index 0000000..a83c07c Binary files /dev/null and b/src/images/creatures/Scabaras lancer#Default.png differ diff --git a/src/images/creatures/Scabaras mage#Default.png b/src/images/creatures/Scabaras mage#Default.png new file mode 100644 index 0000000..ffdb509 Binary files /dev/null and b/src/images/creatures/Scabaras mage#Default.png differ diff --git a/src/images/creatures/Scabaras ranger#Default.png b/src/images/creatures/Scabaras ranger#Default.png new file mode 100644 index 0000000..1330925 Binary files /dev/null and b/src/images/creatures/Scabaras ranger#Default.png differ diff --git a/src/images/creatures/Scarab akh#Default.png b/src/images/creatures/Scarab akh#Default.png new file mode 100644 index 0000000..81cca1b Binary files /dev/null and b/src/images/creatures/Scarab akh#Default.png differ diff --git a/src/images/creatures/Scarab mage#Contact!.png b/src/images/creatures/Scarab mage#Contact!.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/src/images/creatures/Scarab mage#Contact!.png differ diff --git a/src/images/creatures/Scarab mage#Dominion Tower.png b/src/images/creatures/Scarab mage#Dominion Tower.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/src/images/creatures/Scarab mage#Dominion Tower.png differ diff --git a/src/images/creatures/Scarab mage#Rumble Mode.png b/src/images/creatures/Scarab mage#Rumble Mode.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/src/images/creatures/Scarab mage#Rumble Mode.png differ diff --git a/src/images/creatures/Scarab mage#Sophanem Dungeon.png b/src/images/creatures/Scarab mage#Sophanem Dungeon.png new file mode 100644 index 0000000..21f9102 Binary files /dev/null and b/src/images/creatures/Scarab mage#Sophanem Dungeon.png differ diff --git a/src/images/creatures/Scorpion (Ape Atoll)#Default.png b/src/images/creatures/Scorpion (Ape Atoll)#Default.png new file mode 100644 index 0000000..d1e3bb8 Binary files /dev/null and b/src/images/creatures/Scorpion (Ape Atoll)#Default.png differ diff --git a/src/images/creatures/Scorpion#Level 14.png b/src/images/creatures/Scorpion#Level 14.png new file mode 100644 index 0000000..ca4041e Binary files /dev/null and b/src/images/creatures/Scorpion#Level 14.png differ diff --git a/src/images/creatures/Scorpion#Level 26 (Stronghold of Security, 1).png b/src/images/creatures/Scorpion#Level 26 (Stronghold of Security, 1).png new file mode 100644 index 0000000..ca4041e Binary files /dev/null and b/src/images/creatures/Scorpion#Level 26 (Stronghold of Security, 1).png differ diff --git a/src/images/creatures/Scorpion#Level 26 (Stronghold of Security, 2).png b/src/images/creatures/Scorpion#Level 26 (Stronghold of Security, 2).png new file mode 100644 index 0000000..0b747b6 Binary files /dev/null and b/src/images/creatures/Scorpion#Level 26 (Stronghold of Security, 2).png differ diff --git a/src/images/creatures/Scutarius#1.png b/src/images/creatures/Scutarius#1.png new file mode 100644 index 0000000..d92f1e1 Binary files /dev/null and b/src/images/creatures/Scutarius#1.png differ diff --git a/src/images/creatures/Scutarius#2.png b/src/images/creatures/Scutarius#2.png new file mode 100644 index 0000000..aa168a5 Binary files /dev/null and b/src/images/creatures/Scutarius#2.png differ diff --git a/src/images/creatures/Sea Snake Hatchling#Default.png b/src/images/creatures/Sea Snake Hatchling#Default.png new file mode 100644 index 0000000..ce4be4e Binary files /dev/null and b/src/images/creatures/Sea Snake Hatchling#Default.png differ diff --git a/src/images/creatures/Sea Snake Young#Default.png b/src/images/creatures/Sea Snake Young#Default.png new file mode 100644 index 0000000..731e379 Binary files /dev/null and b/src/images/creatures/Sea Snake Young#Default.png differ diff --git a/src/images/creatures/Sea crocodile#Normal mode.png b/src/images/creatures/Sea crocodile#Normal mode.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/src/images/creatures/Sea crocodile#Normal mode.png differ diff --git a/src/images/creatures/Sea crocodile#Story mode.png b/src/images/creatures/Sea crocodile#Story mode.png new file mode 100644 index 0000000..3c8c0e1 Binary files /dev/null and b/src/images/creatures/Sea crocodile#Story mode.png differ diff --git a/src/images/creatures/Sea horror#Normal mode.png b/src/images/creatures/Sea horror#Normal mode.png new file mode 100644 index 0000000..8c5cc99 Binary files /dev/null and b/src/images/creatures/Sea horror#Normal mode.png differ diff --git a/src/images/creatures/Sea horror#Story mode.png b/src/images/creatures/Sea horror#Story mode.png new file mode 100644 index 0000000..8c5cc99 Binary files /dev/null and b/src/images/creatures/Sea horror#Story mode.png differ diff --git a/src/images/creatures/Seagull#Default.png b/src/images/creatures/Seagull#Default.png new file mode 100644 index 0000000..d31d5eb Binary files /dev/null and b/src/images/creatures/Seagull#Default.png differ diff --git a/src/images/creatures/Seeker#Default.png b/src/images/creatures/Seeker#Default.png new file mode 100644 index 0000000..4a85f8a Binary files /dev/null and b/src/images/creatures/Seeker#Default.png differ diff --git a/src/images/creatures/Seething Pyrefiend#Default.png b/src/images/creatures/Seething Pyrefiend#Default.png new file mode 100644 index 0000000..ce5e21f Binary files /dev/null and b/src/images/creatures/Seething Pyrefiend#Default.png differ diff --git a/src/images/creatures/Seiryu the Azure Serpent#Normal mode.png b/src/images/creatures/Seiryu the Azure Serpent#Normal mode.png new file mode 100644 index 0000000..d8488f5 Binary files /dev/null and b/src/images/creatures/Seiryu the Azure Serpent#Normal mode.png differ diff --git a/src/images/creatures/Seiryu the Azure Serpent#Story mode.png b/src/images/creatures/Seiryu the Azure Serpent#Story mode.png new file mode 100644 index 0000000..d8488f5 Binary files /dev/null and b/src/images/creatures/Seiryu the Azure Serpent#Story mode.png differ diff --git a/src/images/creatures/Seren archer#Default.png b/src/images/creatures/Seren archer#Default.png new file mode 100644 index 0000000..286369e Binary files /dev/null and b/src/images/creatures/Seren archer#Default.png differ diff --git a/src/images/creatures/Seren mage#Default.png b/src/images/creatures/Seren mage#Default.png new file mode 100644 index 0000000..237fdcc Binary files /dev/null and b/src/images/creatures/Seren mage#Default.png differ diff --git a/src/images/creatures/Seren warrior#Default.png b/src/images/creatures/Seren warrior#Default.png new file mode 100644 index 0000000..6206256 Binary files /dev/null and b/src/images/creatures/Seren warrior#Default.png differ diff --git a/src/images/creatures/Sergeant Grimspike#Default.png b/src/images/creatures/Sergeant Grimspike#Default.png new file mode 100644 index 0000000..8c52c6d Binary files /dev/null and b/src/images/creatures/Sergeant Grimspike#Default.png differ diff --git a/src/images/creatures/Sergeant Steelwill#Default.png b/src/images/creatures/Sergeant Steelwill#Default.png new file mode 100644 index 0000000..1f4315f Binary files /dev/null and b/src/images/creatures/Sergeant Steelwill#Default.png differ diff --git a/src/images/creatures/Sergeant Strongstack#Default.png b/src/images/creatures/Sergeant Strongstack#Default.png new file mode 100644 index 0000000..3f63777 Binary files /dev/null and b/src/images/creatures/Sergeant Strongstack#Default.png differ diff --git a/src/images/creatures/Shade#Default.png b/src/images/creatures/Shade#Default.png new file mode 100644 index 0000000..b728521 Binary files /dev/null and b/src/images/creatures/Shade#Default.png differ diff --git a/src/images/creatures/Shadow (Temple of Light)#Default.png b/src/images/creatures/Shadow (Temple of Light)#Default.png new file mode 100644 index 0000000..5f9eedd Binary files /dev/null and b/src/images/creatures/Shadow (Temple of Light)#Default.png differ diff --git a/src/images/creatures/Shadow Hound#Default.png b/src/images/creatures/Shadow Hound#Default.png new file mode 100644 index 0000000..228c2e4 Binary files /dev/null and b/src/images/creatures/Shadow Hound#Default.png differ diff --git a/src/images/creatures/Shadow nihil#boss.png b/src/images/creatures/Shadow nihil#boss.png new file mode 100644 index 0000000..4014b94 Binary files /dev/null and b/src/images/creatures/Shadow nihil#boss.png differ diff --git a/src/images/creatures/Shadow nihil#normal.png b/src/images/creatures/Shadow nihil#normal.png new file mode 100644 index 0000000..4014b94 Binary files /dev/null and b/src/images/creatures/Shadow nihil#normal.png differ diff --git a/src/images/creatures/Shadow spider#Default.png b/src/images/creatures/Shadow spider#Default.png new file mode 100644 index 0000000..b17fb9d Binary files /dev/null and b/src/images/creatures/Shadow spider#Default.png differ diff --git a/src/images/creatures/Shadow warrior#Default.png b/src/images/creatures/Shadow warrior#Default.png new file mode 100644 index 0000000..d9f769c Binary files /dev/null and b/src/images/creatures/Shadow warrior#Default.png differ diff --git a/src/images/creatures/Shara'Kor the Widowmaker#Default.png b/src/images/creatures/Shara'Kor the Widowmaker#Default.png new file mode 100644 index 0000000..2acd87f Binary files /dev/null and b/src/images/creatures/Shara'Kor the Widowmaker#Default.png differ diff --git a/src/images/creatures/Siege engine#Default.png b/src/images/creatures/Siege engine#Default.png new file mode 100644 index 0000000..e1eeae9 Binary files /dev/null and b/src/images/creatures/Siege engine#Default.png differ diff --git a/src/images/creatures/Skeletal Wyvern#1.png b/src/images/creatures/Skeletal Wyvern#1.png new file mode 100644 index 0000000..7a5b794 Binary files /dev/null and b/src/images/creatures/Skeletal Wyvern#1.png differ diff --git a/src/images/creatures/Skeletal Wyvern#2.png b/src/images/creatures/Skeletal Wyvern#2.png new file mode 100644 index 0000000..60502ad Binary files /dev/null and b/src/images/creatures/Skeletal Wyvern#2.png differ diff --git a/src/images/creatures/Skeletal Wyvern#3.png b/src/images/creatures/Skeletal Wyvern#3.png new file mode 100644 index 0000000..35e8741 Binary files /dev/null and b/src/images/creatures/Skeletal Wyvern#3.png differ diff --git a/src/images/creatures/Skeletal Wyvern#4.png b/src/images/creatures/Skeletal Wyvern#4.png new file mode 100644 index 0000000..bef95a3 Binary files /dev/null and b/src/images/creatures/Skeletal Wyvern#4.png differ diff --git a/src/images/creatures/Skeletal hand#Default.png b/src/images/creatures/Skeletal hand#Default.png new file mode 100644 index 0000000..f0a8a9d Binary files /dev/null and b/src/images/creatures/Skeletal hand#Default.png differ diff --git a/src/images/creatures/Skeletal miner#Default.png b/src/images/creatures/Skeletal miner#Default.png new file mode 100644 index 0000000..9407fb3 Binary files /dev/null and b/src/images/creatures/Skeletal miner#Default.png differ diff --git a/src/images/creatures/Skeleton (Ape Atoll)#Default.png b/src/images/creatures/Skeleton (Ape Atoll)#Default.png new file mode 100644 index 0000000..3a1d323 Binary files /dev/null and b/src/images/creatures/Skeleton (Ape Atoll)#Default.png differ diff --git a/src/images/creatures/Skeleton (Barrows)#86.png b/src/images/creatures/Skeleton (Barrows)#86.png new file mode 100644 index 0000000..5daac32 Binary files /dev/null and b/src/images/creatures/Skeleton (Barrows)#86.png differ diff --git a/src/images/creatures/Skeleton (Barrows)#88.png b/src/images/creatures/Skeleton (Barrows)#88.png new file mode 100644 index 0000000..4851c28 Binary files /dev/null and b/src/images/creatures/Skeleton (Barrows)#88.png differ diff --git a/src/images/creatures/Skeleton (Dark Warriors' Fortress)#1.png b/src/images/creatures/Skeleton (Dark Warriors' Fortress)#1.png new file mode 100644 index 0000000..2c3f678 Binary files /dev/null and b/src/images/creatures/Skeleton (Dark Warriors' Fortress)#1.png differ diff --git a/src/images/creatures/Skeleton (Dark Warriors' Fortress)#2.png b/src/images/creatures/Skeleton (Dark Warriors' Fortress)#2.png new file mode 100644 index 0000000..47b2b1d Binary files /dev/null and b/src/images/creatures/Skeleton (Dark Warriors' Fortress)#2.png differ diff --git a/src/images/creatures/Skeleton (Heart of Gielinor)#Default.png b/src/images/creatures/Skeleton (Heart of Gielinor)#Default.png new file mode 100644 index 0000000..4b37510 Binary files /dev/null and b/src/images/creatures/Skeleton (Heart of Gielinor)#Default.png differ diff --git a/src/images/creatures/Skeleton (Lumbridge Catacombs)#Default.png b/src/images/creatures/Skeleton (Lumbridge Catacombs)#Default.png new file mode 100644 index 0000000..19c22fe Binary files /dev/null and b/src/images/creatures/Skeleton (Lumbridge Catacombs)#Default.png differ diff --git a/src/images/creatures/Skeleton (Tarn's Lair)#1.png b/src/images/creatures/Skeleton (Tarn's Lair)#1.png new file mode 100644 index 0000000..b585269 Binary files /dev/null and b/src/images/creatures/Skeleton (Tarn's Lair)#1.png differ diff --git a/src/images/creatures/Skeleton (Tarn's Lair)#2.png b/src/images/creatures/Skeleton (Tarn's Lair)#2.png new file mode 100644 index 0000000..a320236 Binary files /dev/null and b/src/images/creatures/Skeleton (Tarn's Lair)#2.png differ diff --git a/src/images/creatures/Skeleton (Tarn's Lair)#8.png b/src/images/creatures/Skeleton (Tarn's Lair)#8.png new file mode 100644 index 0000000..d7af462 Binary files /dev/null and b/src/images/creatures/Skeleton (Tarn's Lair)#8.png differ diff --git a/src/images/creatures/Skeleton (Temple Trekking)#18.png b/src/images/creatures/Skeleton (Temple Trekking)#18.png new file mode 100644 index 0000000..1e04acd Binary files /dev/null and b/src/images/creatures/Skeleton (Temple Trekking)#18.png differ diff --git a/src/images/creatures/Skeleton (Temple Trekking)#Helmet.png b/src/images/creatures/Skeleton (Temple Trekking)#Helmet.png new file mode 100644 index 0000000..61de178 Binary files /dev/null and b/src/images/creatures/Skeleton (Temple Trekking)#Helmet.png differ diff --git a/src/images/creatures/Skeleton (Temple Trekking)#No helmet.png b/src/images/creatures/Skeleton (Temple Trekking)#No helmet.png new file mode 100644 index 0000000..a5ac528 Binary files /dev/null and b/src/images/creatures/Skeleton (Temple Trekking)#No helmet.png differ diff --git a/src/images/creatures/Skeleton (Ullek)#Axe.png b/src/images/creatures/Skeleton (Ullek)#Axe.png new file mode 100644 index 0000000..5bb9d71 Binary files /dev/null and b/src/images/creatures/Skeleton (Ullek)#Axe.png differ diff --git a/src/images/creatures/Skeleton (Ullek)#Mace.png b/src/images/creatures/Skeleton (Ullek)#Mace.png new file mode 100644 index 0000000..c361019 Binary files /dev/null and b/src/images/creatures/Skeleton (Ullek)#Mace.png differ diff --git a/src/images/creatures/Skeleton (Ullek)#Round shield.png b/src/images/creatures/Skeleton (Ullek)#Round shield.png new file mode 100644 index 0000000..2a10826 Binary files /dev/null and b/src/images/creatures/Skeleton (Ullek)#Round shield.png differ diff --git a/src/images/creatures/Skeleton (Ullek)#Square shield.png b/src/images/creatures/Skeleton (Ullek)#Square shield.png new file mode 100644 index 0000000..36acbd4 Binary files /dev/null and b/src/images/creatures/Skeleton (Ullek)#Square shield.png differ diff --git a/src/images/creatures/Skeleton (Ullek)#Warhammer.png b/src/images/creatures/Skeleton (Ullek)#Warhammer.png new file mode 100644 index 0000000..9d68608 Binary files /dev/null and b/src/images/creatures/Skeleton (Ullek)#Warhammer.png differ diff --git a/src/images/creatures/Skeleton (Uncharted Isles)#Melee (With Weapons).png b/src/images/creatures/Skeleton (Uncharted Isles)#Melee (With Weapons).png new file mode 100644 index 0000000..956ef9f Binary files /dev/null and b/src/images/creatures/Skeleton (Uncharted Isles)#Melee (With Weapons).png differ diff --git a/src/images/creatures/Skeleton (Uncharted Isles)#Melee (Without Weapons).png b/src/images/creatures/Skeleton (Uncharted Isles)#Melee (Without Weapons).png new file mode 100644 index 0000000..64521d4 Binary files /dev/null and b/src/images/creatures/Skeleton (Uncharted Isles)#Melee (Without Weapons).png differ diff --git a/src/images/creatures/Skeleton (Uncharted Isles)#Ranged.png b/src/images/creatures/Skeleton (Uncharted Isles)#Ranged.png new file mode 100644 index 0000000..f53a5f1 Binary files /dev/null and b/src/images/creatures/Skeleton (Uncharted Isles)#Ranged.png differ diff --git a/src/images/creatures/Skeleton Archer#Normal mode.png b/src/images/creatures/Skeleton Archer#Normal mode.png new file mode 100644 index 0000000..b6eca66 Binary files /dev/null and b/src/images/creatures/Skeleton Archer#Normal mode.png differ diff --git a/src/images/creatures/Skeleton Archer#Story mode.png b/src/images/creatures/Skeleton Archer#Story mode.png new file mode 100644 index 0000000..569eda6 Binary files /dev/null and b/src/images/creatures/Skeleton Archer#Story mode.png differ diff --git a/src/images/creatures/Skeleton Mage#Level 19.png b/src/images/creatures/Skeleton Mage#Level 19.png new file mode 100644 index 0000000..b585269 Binary files /dev/null and b/src/images/creatures/Skeleton Mage#Level 19.png differ diff --git a/src/images/creatures/Skeleton Mage#Level 49.png b/src/images/creatures/Skeleton Mage#Level 49.png new file mode 100644 index 0000000..b585269 Binary files /dev/null and b/src/images/creatures/Skeleton Mage#Level 49.png differ diff --git a/src/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ancient Awakening).png b/src/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ancient Awakening).png new file mode 100644 index 0000000..c08b3ad Binary files /dev/null and b/src/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ancient Awakening).png differ diff --git a/src/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ungael combat activity).png b/src/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ungael combat activity).png new file mode 100644 index 0000000..c08b3ad Binary files /dev/null and b/src/images/creatures/Skeleton archer (Ancient Awakening)#1 (Ungael combat activity).png differ diff --git a/src/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ancient Awakening).png b/src/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ancient Awakening).png new file mode 100644 index 0000000..5a19d12 Binary files /dev/null and b/src/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ancient Awakening).png differ diff --git a/src/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ungael combat activity).png b/src/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ungael combat activity).png new file mode 100644 index 0000000..8fe9759 Binary files /dev/null and b/src/images/creatures/Skeleton archer (Ancient Awakening)#2 (Ungael combat activity).png differ diff --git a/src/images/creatures/Skeleton brute#Default.png b/src/images/creatures/Skeleton brute#Default.png new file mode 100644 index 0000000..7df9d34 Binary files /dev/null and b/src/images/creatures/Skeleton brute#Default.png differ diff --git a/src/images/creatures/Skeleton fremennik#Level 23.png b/src/images/creatures/Skeleton fremennik#Level 23.png new file mode 100644 index 0000000..1648cf6 Binary files /dev/null and b/src/images/creatures/Skeleton fremennik#Level 23.png differ diff --git a/src/images/creatures/Skeleton fremennik#Level 28.png b/src/images/creatures/Skeleton fremennik#Level 28.png new file mode 100644 index 0000000..1648cf6 Binary files /dev/null and b/src/images/creatures/Skeleton fremennik#Level 28.png differ diff --git a/src/images/creatures/Skeleton fremennik#Level 30.png b/src/images/creatures/Skeleton fremennik#Level 30.png new file mode 100644 index 0000000..1648cf6 Binary files /dev/null and b/src/images/creatures/Skeleton fremennik#Level 30.png differ diff --git a/src/images/creatures/Skeleton heavy#Default.png b/src/images/creatures/Skeleton heavy#Default.png new file mode 100644 index 0000000..c9558bb Binary files /dev/null and b/src/images/creatures/Skeleton heavy#Default.png differ diff --git a/src/images/creatures/Skeleton hero#Default.png b/src/images/creatures/Skeleton hero#Default.png new file mode 100644 index 0000000..1f9c8ce Binary files /dev/null and b/src/images/creatures/Skeleton hero#Default.png differ diff --git a/src/images/creatures/Skeleton knight#Ancient Awakening.png b/src/images/creatures/Skeleton knight#Ancient Awakening.png new file mode 100644 index 0000000..65c8648 Binary files /dev/null and b/src/images/creatures/Skeleton knight#Ancient Awakening.png differ diff --git a/src/images/creatures/Skeleton knight#Ungael combat activity (hard).png b/src/images/creatures/Skeleton knight#Ungael combat activity (hard).png new file mode 100644 index 0000000..65c8648 Binary files /dev/null and b/src/images/creatures/Skeleton knight#Ungael combat activity (hard).png differ diff --git a/src/images/creatures/Skeleton knight#Ungael combat activity (standard).png b/src/images/creatures/Skeleton knight#Ungael combat activity (standard).png new file mode 100644 index 0000000..65c8648 Binary files /dev/null and b/src/images/creatures/Skeleton knight#Ungael combat activity (standard).png differ diff --git a/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ancient Awakening.png b/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ancient Awakening.png new file mode 100644 index 0000000..f2ad3a0 Binary files /dev/null and b/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ancient Awakening.png differ diff --git a/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (hard).png b/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (hard).png new file mode 100644 index 0000000..f2ad3a0 Binary files /dev/null and b/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (hard).png differ diff --git a/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (standard).png b/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (standard).png new file mode 100644 index 0000000..f2ad3a0 Binary files /dev/null and b/src/images/creatures/Skeleton ranger (Ancient Awakening)#Ungael combat activity (standard).png differ diff --git a/src/images/creatures/Skeleton thug#Default.png b/src/images/creatures/Skeleton thug#Default.png new file mode 100644 index 0000000..27d1817 Binary files /dev/null and b/src/images/creatures/Skeleton thug#Default.png differ diff --git a/src/images/creatures/Skeleton warlord#Default.png b/src/images/creatures/Skeleton warlord#Default.png new file mode 100644 index 0000000..0dfbf69 Binary files /dev/null and b/src/images/creatures/Skeleton warlord#Default.png differ diff --git a/src/images/creatures/Skeleton warrior (Ancient Awakening)#Default.png b/src/images/creatures/Skeleton warrior (Ancient Awakening)#Default.png new file mode 100644 index 0000000..cf5e798 Binary files /dev/null and b/src/images/creatures/Skeleton warrior (Ancient Awakening)#Default.png differ diff --git a/src/images/creatures/Skeleton#Level 15.png b/src/images/creatures/Skeleton#Level 15.png new file mode 100644 index 0000000..835db36 Binary files /dev/null and b/src/images/creatures/Skeleton#Level 15.png differ diff --git a/src/images/creatures/Skeleton#Level 16.png b/src/images/creatures/Skeleton#Level 16.png new file mode 100644 index 0000000..5b19b37 Binary files /dev/null and b/src/images/creatures/Skeleton#Level 16.png differ diff --git a/src/images/creatures/Skeleton#Level 32.png b/src/images/creatures/Skeleton#Level 32.png new file mode 100644 index 0000000..a06d8bf Binary files /dev/null and b/src/images/creatures/Skeleton#Level 32.png differ diff --git a/src/images/creatures/Skeleton#Level 46.png b/src/images/creatures/Skeleton#Level 46.png new file mode 100644 index 0000000..36d1992 Binary files /dev/null and b/src/images/creatures/Skeleton#Level 46.png differ diff --git a/src/images/creatures/Skeleton#Level 51.png b/src/images/creatures/Skeleton#Level 51.png new file mode 100644 index 0000000..1a4c652 Binary files /dev/null and b/src/images/creatures/Skeleton#Level 51.png differ diff --git a/src/images/creatures/Skeleton#Level 58.png b/src/images/creatures/Skeleton#Level 58.png new file mode 100644 index 0000000..d75c2fa Binary files /dev/null and b/src/images/creatures/Skeleton#Level 58.png differ diff --git a/src/images/creatures/Skoblin#Default.png b/src/images/creatures/Skoblin#Default.png new file mode 100644 index 0000000..ae08ccb Binary files /dev/null and b/src/images/creatures/Skoblin#Default.png differ diff --git a/src/images/creatures/Skogre#1.png b/src/images/creatures/Skogre#1.png new file mode 100644 index 0000000..d2dca13 Binary files /dev/null and b/src/images/creatures/Skogre#1.png differ diff --git a/src/images/creatures/Skogre#2.png b/src/images/creatures/Skogre#2.png new file mode 100644 index 0000000..d2dca13 Binary files /dev/null and b/src/images/creatures/Skogre#2.png differ diff --git a/src/images/creatures/Skogre#3.png b/src/images/creatures/Skogre#3.png new file mode 100644 index 0000000..d2dca13 Binary files /dev/null and b/src/images/creatures/Skogre#3.png differ diff --git a/src/images/creatures/Slasher Demon#Default.png b/src/images/creatures/Slasher Demon#Default.png new file mode 100644 index 0000000..2d3e248 Binary files /dev/null and b/src/images/creatures/Slasher Demon#Default.png differ diff --git a/src/images/creatures/Small Lizard#Green.png b/src/images/creatures/Small Lizard#Green.png new file mode 100644 index 0000000..963d4ee Binary files /dev/null and b/src/images/creatures/Small Lizard#Green.png differ diff --git a/src/images/creatures/Small Lizard#Yellow.png b/src/images/creatures/Small Lizard#Yellow.png new file mode 100644 index 0000000..70b5b54 Binary files /dev/null and b/src/images/creatures/Small Lizard#Yellow.png differ diff --git a/src/images/creatures/Small scarab#Do No Evil.png b/src/images/creatures/Small scarab#Do No Evil.png new file mode 100644 index 0000000..0583c1b Binary files /dev/null and b/src/images/creatures/Small scarab#Do No Evil.png differ diff --git a/src/images/creatures/Small scarab#Uzer Mastaba.png b/src/images/creatures/Small scarab#Uzer Mastaba.png new file mode 100644 index 0000000..ad9064e Binary files /dev/null and b/src/images/creatures/Small scarab#Uzer Mastaba.png differ diff --git a/src/images/creatures/Small scarab#Zombie (1).png b/src/images/creatures/Small scarab#Zombie (1).png new file mode 100644 index 0000000..5c6ab9f Binary files /dev/null and b/src/images/creatures/Small scarab#Zombie (1).png differ diff --git a/src/images/creatures/Small scarab#Zombie (2).png b/src/images/creatures/Small scarab#Zombie (2).png new file mode 100644 index 0000000..d5baa3e Binary files /dev/null and b/src/images/creatures/Small scarab#Zombie (2).png differ diff --git a/src/images/creatures/Small scarab#Zombie (3).png b/src/images/creatures/Small scarab#Zombie (3).png new file mode 100644 index 0000000..a4f0de3 Binary files /dev/null and b/src/images/creatures/Small scarab#Zombie (3).png differ diff --git a/src/images/creatures/Smoke nihil#boss.png b/src/images/creatures/Smoke nihil#boss.png new file mode 100644 index 0000000..e4622da Binary files /dev/null and b/src/images/creatures/Smoke nihil#boss.png differ diff --git a/src/images/creatures/Smoke nihil#normal.png b/src/images/creatures/Smoke nihil#normal.png new file mode 100644 index 0000000..e4622da Binary files /dev/null and b/src/images/creatures/Smoke nihil#normal.png differ diff --git a/src/images/creatures/Smoulders#Default.png b/src/images/creatures/Smoulders#Default.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/src/images/creatures/Smoulders#Default.png differ diff --git a/src/images/creatures/Smoulders, the Revenger#Default.png b/src/images/creatures/Smoulders, the Revenger#Default.png new file mode 100644 index 0000000..12c7d02 Binary files /dev/null and b/src/images/creatures/Smoulders, the Revenger#Default.png differ diff --git a/src/images/creatures/Solak#Left arm.png b/src/images/creatures/Solak#Left arm.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/src/images/creatures/Solak#Left arm.png differ diff --git a/src/images/creatures/Solak#Left leg.png b/src/images/creatures/Solak#Left leg.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/src/images/creatures/Solak#Left leg.png differ diff --git a/src/images/creatures/Solak#Right arm.png b/src/images/creatures/Solak#Right arm.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/src/images/creatures/Solak#Right arm.png differ diff --git a/src/images/creatures/Solak#Right leg.png b/src/images/creatures/Solak#Right leg.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/src/images/creatures/Solak#Right leg.png differ diff --git a/src/images/creatures/Solak#Solak.png b/src/images/creatures/Solak#Solak.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/src/images/creatures/Solak#Solak.png differ diff --git a/src/images/creatures/Solak#Withering.png b/src/images/creatures/Solak#Withering.png new file mode 100644 index 0000000..1ccbdce Binary files /dev/null and b/src/images/creatures/Solak#Withering.png differ diff --git a/src/images/creatures/Soulgazer (elite)#Default.png b/src/images/creatures/Soulgazer (elite)#Default.png new file mode 100644 index 0000000..0a7fe08 Binary files /dev/null and b/src/images/creatures/Soulgazer (elite)#Default.png differ diff --git a/src/images/creatures/Soulgazer#Default.png b/src/images/creatures/Soulgazer#Default.png new file mode 100644 index 0000000..0a7fe08 Binary files /dev/null and b/src/images/creatures/Soulgazer#Default.png differ diff --git a/src/images/creatures/Soulless armoured zombie#Default.png b/src/images/creatures/Soulless armoured zombie#Default.png new file mode 100644 index 0000000..fcc0b40 Binary files /dev/null and b/src/images/creatures/Soulless armoured zombie#Default.png differ diff --git a/src/images/creatures/Soulless unarmoured zombie#Default.png b/src/images/creatures/Soulless unarmoured zombie#Default.png new file mode 100644 index 0000000..fcc0b40 Binary files /dev/null and b/src/images/creatures/Soulless unarmoured zombie#Default.png differ diff --git a/src/images/creatures/Spider#Ape Atoll.png b/src/images/creatures/Spider#Ape Atoll.png new file mode 100644 index 0000000..f44e18a Binary files /dev/null and b/src/images/creatures/Spider#Ape Atoll.png differ diff --git a/src/images/creatures/Spider#Common.png b/src/images/creatures/Spider#Common.png new file mode 100644 index 0000000..ea6a406 Binary files /dev/null and b/src/images/creatures/Spider#Common.png differ diff --git a/src/images/creatures/Spider#Stronghold of Security.png b/src/images/creatures/Spider#Stronghold of Security.png new file mode 100644 index 0000000..be650ef Binary files /dev/null and b/src/images/creatures/Spider#Stronghold of Security.png differ diff --git a/src/images/creatures/Spider#Underground Pass.png b/src/images/creatures/Spider#Underground Pass.png new file mode 100644 index 0000000..be650ef Binary files /dev/null and b/src/images/creatures/Spider#Underground Pass.png differ diff --git a/src/images/creatures/Spiritual mage#Armadyl.png b/src/images/creatures/Spiritual mage#Armadyl.png new file mode 100644 index 0000000..22e9413 Binary files /dev/null and b/src/images/creatures/Spiritual mage#Armadyl.png differ diff --git a/src/images/creatures/Spiritual mage#Bandos.png b/src/images/creatures/Spiritual mage#Bandos.png new file mode 100644 index 0000000..bb800f4 Binary files /dev/null and b/src/images/creatures/Spiritual mage#Bandos.png differ diff --git a/src/images/creatures/Spiritual mage#Saradomin.png b/src/images/creatures/Spiritual mage#Saradomin.png new file mode 100644 index 0000000..2ad148d Binary files /dev/null and b/src/images/creatures/Spiritual mage#Saradomin.png differ diff --git a/src/images/creatures/Spiritual mage#The World Wakes.png b/src/images/creatures/Spiritual mage#The World Wakes.png new file mode 100644 index 0000000..2ad148d Binary files /dev/null and b/src/images/creatures/Spiritual mage#The World Wakes.png differ diff --git a/src/images/creatures/Spiritual mage#Zamorak.png b/src/images/creatures/Spiritual mage#Zamorak.png new file mode 100644 index 0000000..8df06f2 Binary files /dev/null and b/src/images/creatures/Spiritual mage#Zamorak.png differ diff --git a/src/images/creatures/Spiritual ranger#Armadyl.png b/src/images/creatures/Spiritual ranger#Armadyl.png new file mode 100644 index 0000000..49c575e Binary files /dev/null and b/src/images/creatures/Spiritual ranger#Armadyl.png differ diff --git a/src/images/creatures/Spiritual ranger#Bandos.png b/src/images/creatures/Spiritual ranger#Bandos.png new file mode 100644 index 0000000..365e69d Binary files /dev/null and b/src/images/creatures/Spiritual ranger#Bandos.png differ diff --git a/src/images/creatures/Spiritual ranger#Saradomin.png b/src/images/creatures/Spiritual ranger#Saradomin.png new file mode 100644 index 0000000..0bd03b5 Binary files /dev/null and b/src/images/creatures/Spiritual ranger#Saradomin.png differ diff --git a/src/images/creatures/Spiritual ranger#The World Wakes.png b/src/images/creatures/Spiritual ranger#The World Wakes.png new file mode 100644 index 0000000..0bd03b5 Binary files /dev/null and b/src/images/creatures/Spiritual ranger#The World Wakes.png differ diff --git a/src/images/creatures/Spiritual ranger#Zamorak.png b/src/images/creatures/Spiritual ranger#Zamorak.png new file mode 100644 index 0000000..042b315 Binary files /dev/null and b/src/images/creatures/Spiritual ranger#Zamorak.png differ diff --git a/src/images/creatures/Spiritual warrior#Armadyl.png b/src/images/creatures/Spiritual warrior#Armadyl.png new file mode 100644 index 0000000..d79e1c7 Binary files /dev/null and b/src/images/creatures/Spiritual warrior#Armadyl.png differ diff --git a/src/images/creatures/Spiritual warrior#Bandos.png b/src/images/creatures/Spiritual warrior#Bandos.png new file mode 100644 index 0000000..1e957f9 Binary files /dev/null and b/src/images/creatures/Spiritual warrior#Bandos.png differ diff --git a/src/images/creatures/Spiritual warrior#Saradomin.png b/src/images/creatures/Spiritual warrior#Saradomin.png new file mode 100644 index 0000000..2536b63 Binary files /dev/null and b/src/images/creatures/Spiritual warrior#Saradomin.png differ diff --git a/src/images/creatures/Spiritual warrior#The World Wakes.png b/src/images/creatures/Spiritual warrior#The World Wakes.png new file mode 100644 index 0000000..2536b63 Binary files /dev/null and b/src/images/creatures/Spiritual warrior#The World Wakes.png differ diff --git a/src/images/creatures/Spiritual warrior#Zamorak.png b/src/images/creatures/Spiritual warrior#Zamorak.png new file mode 100644 index 0000000..b5ca763 Binary files /dev/null and b/src/images/creatures/Spiritual warrior#Zamorak.png differ diff --git a/src/images/creatures/Spyndra#Normal mode.png b/src/images/creatures/Spyndra#Normal mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/src/images/creatures/Spyndra#Normal mode.png differ diff --git a/src/images/creatures/Spyndra#Story mode.png b/src/images/creatures/Spyndra#Story mode.png new file mode 100644 index 0000000..95d1899 Binary files /dev/null and b/src/images/creatures/Spyndra#Story mode.png differ diff --git a/src/images/creatures/Steel dragon#Default.png b/src/images/creatures/Steel dragon#Default.png new file mode 100644 index 0000000..b697fd5 Binary files /dev/null and b/src/images/creatures/Steel dragon#Default.png differ diff --git a/src/images/creatures/Stick#Default.png b/src/images/creatures/Stick#Default.png new file mode 100644 index 0000000..4f5e5d8 Binary files /dev/null and b/src/images/creatures/Stick#Default.png differ diff --git a/src/images/creatures/Stinkears#Default.png b/src/images/creatures/Stinkears#Default.png new file mode 100644 index 0000000..36b11ab Binary files /dev/null and b/src/images/creatures/Stinkears#Default.png differ diff --git a/src/images/creatures/Stove#Default.png b/src/images/creatures/Stove#Default.png new file mode 100644 index 0000000..6f073d4 Binary files /dev/null and b/src/images/creatures/Stove#Default.png differ diff --git a/src/images/creatures/Summoned Zombie (The Shadow Reef)#Normal mode.png b/src/images/creatures/Summoned Zombie (The Shadow Reef)#Normal mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/src/images/creatures/Summoned Zombie (The Shadow Reef)#Normal mode.png differ diff --git a/src/images/creatures/Summoned Zombie (The Shadow Reef)#Story mode.png b/src/images/creatures/Summoned Zombie (The Shadow Reef)#Story mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/src/images/creatures/Summoned Zombie (The Shadow Reef)#Story mode.png differ diff --git a/src/images/creatures/Summoned Zombie#Default.png b/src/images/creatures/Summoned Zombie#Default.png new file mode 100644 index 0000000..1b2c1ed Binary files /dev/null and b/src/images/creatures/Summoned Zombie#Default.png differ diff --git a/src/images/creatures/Summoned armoured zombie#Normal mode.png b/src/images/creatures/Summoned armoured zombie#Normal mode.png new file mode 100644 index 0000000..8374d31 Binary files /dev/null and b/src/images/creatures/Summoned armoured zombie#Normal mode.png differ diff --git a/src/images/creatures/Summoned armoured zombie#Story mode.png b/src/images/creatures/Summoned armoured zombie#Story mode.png new file mode 100644 index 0000000..cd0f9d9 Binary files /dev/null and b/src/images/creatures/Summoned armoured zombie#Story mode.png differ diff --git a/src/images/creatures/Summoned skeleton archer#Normal mode.png b/src/images/creatures/Summoned skeleton archer#Normal mode.png new file mode 100644 index 0000000..ec1baa0 Binary files /dev/null and b/src/images/creatures/Summoned skeleton archer#Normal mode.png differ diff --git a/src/images/creatures/Summoned skeleton archer#Story mode.png b/src/images/creatures/Summoned skeleton archer#Story mode.png new file mode 100644 index 0000000..ec1baa0 Binary files /dev/null and b/src/images/creatures/Summoned skeleton archer#Story mode.png differ diff --git a/src/images/creatures/Summoned skeleton#Normal mode.png b/src/images/creatures/Summoned skeleton#Normal mode.png new file mode 100644 index 0000000..51df0ec Binary files /dev/null and b/src/images/creatures/Summoned skeleton#Normal mode.png differ diff --git a/src/images/creatures/Summoned skeleton#Story mode.png b/src/images/creatures/Summoned skeleton#Story mode.png new file mode 100644 index 0000000..51df0ec Binary files /dev/null and b/src/images/creatures/Summoned skeleton#Story mode.png differ diff --git a/src/images/creatures/Super Cow#Default.png b/src/images/creatures/Super Cow#Default.png new file mode 100644 index 0000000..d7c1d2b Binary files /dev/null and b/src/images/creatures/Super Cow#Default.png differ diff --git a/src/images/creatures/Suqah#Level 73 (Dual wielding swords).png b/src/images/creatures/Suqah#Level 73 (Dual wielding swords).png new file mode 100644 index 0000000..f946cdc Binary files /dev/null and b/src/images/creatures/Suqah#Level 73 (Dual wielding swords).png differ diff --git a/src/images/creatures/Suqah#Level 74 (Magic).png b/src/images/creatures/Suqah#Level 74 (Magic).png new file mode 100644 index 0000000..58890b3 Binary files /dev/null and b/src/images/creatures/Suqah#Level 74 (Magic).png differ diff --git a/src/images/creatures/Suqah#Level 74.png b/src/images/creatures/Suqah#Level 74.png new file mode 100644 index 0000000..58890b3 Binary files /dev/null and b/src/images/creatures/Suqah#Level 74.png differ diff --git a/src/images/creatures/Suqah#Level 79.png b/src/images/creatures/Suqah#Level 79.png new file mode 100644 index 0000000..58890b3 Binary files /dev/null and b/src/images/creatures/Suqah#Level 79.png differ diff --git a/src/images/creatures/Swamp frog#Default.png b/src/images/creatures/Swamp frog#Default.png new file mode 100644 index 0000000..5054b8b Binary files /dev/null and b/src/images/creatures/Swamp frog#Default.png differ diff --git a/src/images/creatures/Taraket the Necromancer#Normal mode.png b/src/images/creatures/Taraket the Necromancer#Normal mode.png new file mode 100644 index 0000000..bf20f57 Binary files /dev/null and b/src/images/creatures/Taraket the Necromancer#Normal mode.png differ diff --git a/src/images/creatures/Taraket the Necromancer#Story mode.png b/src/images/creatures/Taraket the Necromancer#Story mode.png new file mode 100644 index 0000000..bf20f57 Binary files /dev/null and b/src/images/creatures/Taraket the Necromancer#Story mode.png differ diff --git a/src/images/creatures/Telos, the Warden#Dormant.png b/src/images/creatures/Telos, the Warden#Dormant.png new file mode 100644 index 0000000..b44dffc Binary files /dev/null and b/src/images/creatures/Telos, the Warden#Dormant.png differ diff --git a/src/images/creatures/Telos, the Warden#Phase 5.png b/src/images/creatures/Telos, the Warden#Phase 5.png new file mode 100644 index 0000000..f85f55d Binary files /dev/null and b/src/images/creatures/Telos, the Warden#Phase 5.png differ diff --git a/src/images/creatures/Telos, the Warden#Standard.png b/src/images/creatures/Telos, the Warden#Standard.png new file mode 100644 index 0000000..6ef2ba6 Binary files /dev/null and b/src/images/creatures/Telos, the Warden#Standard.png differ diff --git a/src/images/creatures/Tenacious toucan#Default.png b/src/images/creatures/Tenacious toucan#Default.png new file mode 100644 index 0000000..531785d Binary files /dev/null and b/src/images/creatures/Tenacious toucan#Default.png differ diff --git a/src/images/creatures/Terror dog#Level 61.png b/src/images/creatures/Terror dog#Level 61.png new file mode 100644 index 0000000..64b4982 Binary files /dev/null and b/src/images/creatures/Terror dog#Level 61.png differ diff --git a/src/images/creatures/Terror dog#Level 65.png b/src/images/creatures/Terror dog#Level 65.png new file mode 100644 index 0000000..64b4982 Binary files /dev/null and b/src/images/creatures/Terror dog#Level 65.png differ diff --git a/src/images/creatures/Terrorbird#Default.png b/src/images/creatures/Terrorbird#Default.png new file mode 100644 index 0000000..38b3611 Binary files /dev/null and b/src/images/creatures/Terrorbird#Default.png differ diff --git a/src/images/creatures/The Ambassador#Normal mode.png b/src/images/creatures/The Ambassador#Normal mode.png new file mode 100644 index 0000000..019f7d0 Binary files /dev/null and b/src/images/creatures/The Ambassador#Normal mode.png differ diff --git a/src/images/creatures/The Ambassador#Story mode.png b/src/images/creatures/The Ambassador#Story mode.png new file mode 100644 index 0000000..019f7d0 Binary files /dev/null and b/src/images/creatures/The Ambassador#Story mode.png differ diff --git a/src/images/creatures/The Magister#Default.png b/src/images/creatures/The Magister#Default.png new file mode 100644 index 0000000..e895759 Binary files /dev/null and b/src/images/creatures/The Magister#Default.png differ diff --git a/src/images/creatures/Thrower Troll#Death Plateau.png b/src/images/creatures/Thrower Troll#Death Plateau.png new file mode 100644 index 0000000..9145f53 Binary files /dev/null and b/src/images/creatures/Thrower Troll#Death Plateau.png differ diff --git a/src/images/creatures/Thrower Troll#Trollheim.png b/src/images/creatures/Thrower Troll#Trollheim.png new file mode 100644 index 0000000..9145f53 Binary files /dev/null and b/src/images/creatures/Thrower Troll#Trollheim.png differ diff --git a/src/images/creatures/Throwing muspah#Default.png b/src/images/creatures/Throwing muspah#Default.png new file mode 100644 index 0000000..99c5bfb Binary files /dev/null and b/src/images/creatures/Throwing muspah#Default.png differ diff --git a/src/images/creatures/Torag the Corrupted#Normal.png b/src/images/creatures/Torag the Corrupted#Normal.png new file mode 100644 index 0000000..f16bd70 Binary files /dev/null and b/src/images/creatures/Torag the Corrupted#Normal.png differ diff --git a/src/images/creatures/Torag the Corrupted#Rise of the Six.png b/src/images/creatures/Torag the Corrupted#Rise of the Six.png new file mode 100644 index 0000000..14bfa6c Binary files /dev/null and b/src/images/creatures/Torag the Corrupted#Rise of the Six.png differ diff --git a/src/images/creatures/Tormented demon#Standard.png b/src/images/creatures/Tormented demon#Standard.png new file mode 100644 index 0000000..22132c2 Binary files /dev/null and b/src/images/creatures/Tormented demon#Standard.png differ diff --git a/src/images/creatures/Tormented demon#While Guthix Sleeps.png b/src/images/creatures/Tormented demon#While Guthix Sleeps.png new file mode 100644 index 0000000..5ceb9cb Binary files /dev/null and b/src/images/creatures/Tormented demon#While Guthix Sleeps.png differ diff --git a/src/images/creatures/Tormented soul (Uncharted Isles)#Default.png b/src/images/creatures/Tormented soul (Uncharted Isles)#Default.png new file mode 100644 index 0000000..d9ec8ed Binary files /dev/null and b/src/images/creatures/Tormented soul (Uncharted Isles)#Default.png differ diff --git a/src/images/creatures/Tormented wraith#Default.png b/src/images/creatures/Tormented wraith#Default.png new file mode 100644 index 0000000..39683a0 Binary files /dev/null and b/src/images/creatures/Tormented wraith#Default.png differ diff --git a/src/images/creatures/Torrential Waterfiend (summoned)#Default.png b/src/images/creatures/Torrential Waterfiend (summoned)#Default.png new file mode 100644 index 0000000..5572628 Binary files /dev/null and b/src/images/creatures/Torrential Waterfiend (summoned)#Default.png differ diff --git a/src/images/creatures/Torrential Waterfiend#Default.png b/src/images/creatures/Torrential Waterfiend#Default.png new file mode 100644 index 0000000..9fff216 Binary files /dev/null and b/src/images/creatures/Torrential Waterfiend#Default.png differ diff --git a/src/images/creatures/Tortured soul (Port Phasmatys)#Default.png b/src/images/creatures/Tortured soul (Port Phasmatys)#Default.png new file mode 100644 index 0000000..874f46c Binary files /dev/null and b/src/images/creatures/Tortured soul (Port Phasmatys)#Default.png differ diff --git a/src/images/creatures/Training dummy#Abyssal demon (magic).png b/src/images/creatures/Training dummy#Abyssal demon (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Abyssal demon (magic).png differ diff --git a/src/images/creatures/Training dummy#Abyssal demon (melee).png b/src/images/creatures/Training dummy#Abyssal demon (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Abyssal demon (melee).png differ diff --git a/src/images/creatures/Training dummy#Abyssal demon (ranged).png b/src/images/creatures/Training dummy#Abyssal demon (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Abyssal demon (ranged).png differ diff --git a/src/images/creatures/Training dummy#Basilisk (magic).png b/src/images/creatures/Training dummy#Basilisk (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Basilisk (magic).png differ diff --git a/src/images/creatures/Training dummy#Basilisk (melee).png b/src/images/creatures/Training dummy#Basilisk (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Basilisk (melee).png differ diff --git a/src/images/creatures/Training dummy#Basilisk (ranged).png b/src/images/creatures/Training dummy#Basilisk (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Basilisk (ranged).png differ diff --git a/src/images/creatures/Training dummy#Demon (magic).png b/src/images/creatures/Training dummy#Demon (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Demon (magic).png differ diff --git a/src/images/creatures/Training dummy#Demon (melee).png b/src/images/creatures/Training dummy#Demon (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Demon (melee).png differ diff --git a/src/images/creatures/Training dummy#Demon (ranged).png b/src/images/creatures/Training dummy#Demon (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Demon (ranged).png differ diff --git a/src/images/creatures/Training dummy#Dragon (magic).png b/src/images/creatures/Training dummy#Dragon (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Dragon (magic).png differ diff --git a/src/images/creatures/Training dummy#Dragon (melee).png b/src/images/creatures/Training dummy#Dragon (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Dragon (melee).png differ diff --git a/src/images/creatures/Training dummy#Dragon (ranged).png b/src/images/creatures/Training dummy#Dragon (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Dragon (ranged).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to arrows, medium).png b/src/images/creatures/Training dummy#Magic (weak to arrows, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to arrows, medium).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to arrows, strong).png b/src/images/creatures/Training dummy#Magic (weak to arrows, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to arrows, strong).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to arrows, weak).png b/src/images/creatures/Training dummy#Magic (weak to arrows, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to arrows, weak).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to bolts, medium).png b/src/images/creatures/Training dummy#Magic (weak to bolts, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to bolts, medium).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to bolts, strong).png b/src/images/creatures/Training dummy#Magic (weak to bolts, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to bolts, strong).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to bolts, weak).png b/src/images/creatures/Training dummy#Magic (weak to bolts, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to bolts, weak).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to nothing, medium).png b/src/images/creatures/Training dummy#Magic (weak to nothing, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to nothing, medium).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to nothing, strong).png b/src/images/creatures/Training dummy#Magic (weak to nothing, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to nothing, strong).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to nothing, weak).png b/src/images/creatures/Training dummy#Magic (weak to nothing, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to nothing, weak).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to thrown, medium).png b/src/images/creatures/Training dummy#Magic (weak to thrown, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to thrown, medium).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to thrown, strong).png b/src/images/creatures/Training dummy#Magic (weak to thrown, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to thrown, strong).png differ diff --git a/src/images/creatures/Training dummy#Magic (weak to thrown, weak).png b/src/images/creatures/Training dummy#Magic (weak to thrown, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Magic (weak to thrown, weak).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to air, medium).png b/src/images/creatures/Training dummy#Melee (weak to air, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to air, medium).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to air, strong).png b/src/images/creatures/Training dummy#Melee (weak to air, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to air, strong).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to air, weak).png b/src/images/creatures/Training dummy#Melee (weak to air, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to air, weak).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to earth, medium).png b/src/images/creatures/Training dummy#Melee (weak to earth, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to earth, medium).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to earth, strong).png b/src/images/creatures/Training dummy#Melee (weak to earth, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to earth, strong).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to earth, weak).png b/src/images/creatures/Training dummy#Melee (weak to earth, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to earth, weak).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to fire, medium).png b/src/images/creatures/Training dummy#Melee (weak to fire, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to fire, medium).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to fire, strong).png b/src/images/creatures/Training dummy#Melee (weak to fire, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to fire, strong).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to fire, weak).png b/src/images/creatures/Training dummy#Melee (weak to fire, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to fire, weak).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to nothing, medium).png b/src/images/creatures/Training dummy#Melee (weak to nothing, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to nothing, medium).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to nothing, strong).png b/src/images/creatures/Training dummy#Melee (weak to nothing, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to nothing, strong).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to nothing, weak).png b/src/images/creatures/Training dummy#Melee (weak to nothing, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to nothing, weak).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to water, medium).png b/src/images/creatures/Training dummy#Melee (weak to water, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to water, medium).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to water, strong).png b/src/images/creatures/Training dummy#Melee (weak to water, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to water, strong).png differ diff --git a/src/images/creatures/Training dummy#Melee (weak to water, weak).png b/src/images/creatures/Training dummy#Melee (weak to water, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Melee (weak to water, weak).png differ diff --git a/src/images/creatures/Training dummy#Permanent.png b/src/images/creatures/Training dummy#Permanent.png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Permanent.png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to crush, medium).png b/src/images/creatures/Training dummy#Ranged (weak to crush, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to crush, medium).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to crush, strong).png b/src/images/creatures/Training dummy#Ranged (weak to crush, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to crush, strong).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to crush, weak).png b/src/images/creatures/Training dummy#Ranged (weak to crush, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to crush, weak).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to nothing, medium).png b/src/images/creatures/Training dummy#Ranged (weak to nothing, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to nothing, medium).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to nothing, strong).png b/src/images/creatures/Training dummy#Ranged (weak to nothing, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to nothing, strong).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to nothing, weak).png b/src/images/creatures/Training dummy#Ranged (weak to nothing, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to nothing, weak).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to slash, medium).png b/src/images/creatures/Training dummy#Ranged (weak to slash, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to slash, medium).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to slash, strong).png b/src/images/creatures/Training dummy#Ranged (weak to slash, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to slash, strong).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to slash, weak).png b/src/images/creatures/Training dummy#Ranged (weak to slash, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to slash, weak).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to stab, medium).png b/src/images/creatures/Training dummy#Ranged (weak to stab, medium).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to stab, medium).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to stab, strong).png b/src/images/creatures/Training dummy#Ranged (weak to stab, strong).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to stab, strong).png differ diff --git a/src/images/creatures/Training dummy#Ranged (weak to stab, weak).png b/src/images/creatures/Training dummy#Ranged (weak to stab, weak).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Ranged (weak to stab, weak).png differ diff --git a/src/images/creatures/Training dummy#Revenant (magic).png b/src/images/creatures/Training dummy#Revenant (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Revenant (magic).png differ diff --git a/src/images/creatures/Training dummy#Revenant (melee).png b/src/images/creatures/Training dummy#Revenant (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Revenant (melee).png differ diff --git a/src/images/creatures/Training dummy#Revenant (ranged).png b/src/images/creatures/Training dummy#Revenant (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Revenant (ranged).png differ diff --git a/src/images/creatures/Training dummy#Undead (magic).png b/src/images/creatures/Training dummy#Undead (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Undead (magic).png differ diff --git a/src/images/creatures/Training dummy#Undead (melee).png b/src/images/creatures/Training dummy#Undead (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Undead (melee).png differ diff --git a/src/images/creatures/Training dummy#Undead (ranged).png b/src/images/creatures/Training dummy#Undead (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Undead (ranged).png differ diff --git a/src/images/creatures/Training dummy#Wallasalki (magic).png b/src/images/creatures/Training dummy#Wallasalki (magic).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Wallasalki (magic).png differ diff --git a/src/images/creatures/Training dummy#Wallasalki (melee).png b/src/images/creatures/Training dummy#Wallasalki (melee).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Wallasalki (melee).png differ diff --git a/src/images/creatures/Training dummy#Wallasalki (ranged).png b/src/images/creatures/Training dummy#Wallasalki (ranged).png new file mode 100644 index 0000000..726a5f8 Binary files /dev/null and b/src/images/creatures/Training dummy#Wallasalki (ranged).png differ diff --git a/src/images/creatures/Troll brute (Davendale)#Default.png b/src/images/creatures/Troll brute (Davendale)#Default.png new file mode 100644 index 0000000..c56d15b Binary files /dev/null and b/src/images/creatures/Troll brute (Davendale)#Default.png differ diff --git a/src/images/creatures/Troll brute#Default.png b/src/images/creatures/Troll brute#Default.png new file mode 100644 index 0000000..c1db093 Binary files /dev/null and b/src/images/creatures/Troll brute#Default.png differ diff --git a/src/images/creatures/Troll chucker (Davendale)#Default.png b/src/images/creatures/Troll chucker (Davendale)#Default.png new file mode 100644 index 0000000..6494e83 Binary files /dev/null and b/src/images/creatures/Troll chucker (Davendale)#Default.png differ diff --git a/src/images/creatures/Troll chucker#Default.png b/src/images/creatures/Troll chucker#Default.png new file mode 100644 index 0000000..c77c549 Binary files /dev/null and b/src/images/creatures/Troll chucker#Default.png differ diff --git a/src/images/creatures/Troll general#Club.png b/src/images/creatures/Troll general#Club.png new file mode 100644 index 0000000..1f8e885 Binary files /dev/null and b/src/images/creatures/Troll general#Club.png differ diff --git a/src/images/creatures/Troll general#Hammer.png b/src/images/creatures/Troll general#Hammer.png new file mode 100644 index 0000000..89049ef Binary files /dev/null and b/src/images/creatures/Troll general#Hammer.png differ diff --git a/src/images/creatures/Troll general#Sword.png b/src/images/creatures/Troll general#Sword.png new file mode 100644 index 0000000..404606e Binary files /dev/null and b/src/images/creatures/Troll general#Sword.png differ diff --git a/src/images/creatures/Troll lout#Default.png b/src/images/creatures/Troll lout#Default.png new file mode 100644 index 0000000..872f7b0 Binary files /dev/null and b/src/images/creatures/Troll lout#Default.png differ diff --git a/src/images/creatures/Troll shaman (Davendale)#Default.png b/src/images/creatures/Troll shaman (Davendale)#Default.png new file mode 100644 index 0000000..f0f2997 Binary files /dev/null and b/src/images/creatures/Troll shaman (Davendale)#Default.png differ diff --git a/src/images/creatures/Troll shaman#Default.png b/src/images/creatures/Troll shaman#Default.png new file mode 100644 index 0000000..146a547 Binary files /dev/null and b/src/images/creatures/Troll shaman#Default.png differ diff --git a/src/images/creatures/Troll spectator#Default.png b/src/images/creatures/Troll spectator#Default.png new file mode 100644 index 0000000..d8653fa Binary files /dev/null and b/src/images/creatures/Troll spectator#Default.png differ diff --git a/src/images/creatures/Truthful shadow#Default.png b/src/images/creatures/Truthful shadow#Default.png new file mode 100644 index 0000000..540258b Binary files /dev/null and b/src/images/creatures/Truthful shadow#Default.png differ diff --git a/src/images/creatures/Tstanon Karlak#Default.png b/src/images/creatures/Tstanon Karlak#Default.png new file mode 100644 index 0000000..06fb4eb Binary files /dev/null and b/src/images/creatures/Tstanon Karlak#Default.png differ diff --git a/src/images/creatures/Turoth#60 - Large.png b/src/images/creatures/Turoth#60 - Large.png new file mode 100644 index 0000000..185e9cd Binary files /dev/null and b/src/images/creatures/Turoth#60 - Large.png differ diff --git a/src/images/creatures/Turoth#60 - Small.png b/src/images/creatures/Turoth#60 - Small.png new file mode 100644 index 0000000..f41178e Binary files /dev/null and b/src/images/creatures/Turoth#60 - Small.png differ diff --git a/src/images/creatures/Turoth#68 - Female.png b/src/images/creatures/Turoth#68 - Female.png new file mode 100644 index 0000000..2f2edf4 Binary files /dev/null and b/src/images/creatures/Turoth#68 - Female.png differ diff --git a/src/images/creatures/Turoth#68 - Male.png b/src/images/creatures/Turoth#68 - Male.png new file mode 100644 index 0000000..5906714 Binary files /dev/null and b/src/images/creatures/Turoth#68 - Male.png differ diff --git a/src/images/creatures/TzHaar-Hur#Level 86.png b/src/images/creatures/TzHaar-Hur#Level 86.png new file mode 100644 index 0000000..b4964d4 Binary files /dev/null and b/src/images/creatures/TzHaar-Hur#Level 86.png differ diff --git a/src/images/creatures/TzHaar-Hur#Level 98.png b/src/images/creatures/TzHaar-Hur#Level 98.png new file mode 100644 index 0000000..b4964d4 Binary files /dev/null and b/src/images/creatures/TzHaar-Hur#Level 98.png differ diff --git a/src/images/creatures/TzHaar-Ket#Default.png b/src/images/creatures/TzHaar-Ket#Default.png new file mode 100644 index 0000000..521ff05 Binary files /dev/null and b/src/images/creatures/TzHaar-Ket#Default.png differ diff --git a/src/images/creatures/TzHaar-Mej#Default.png b/src/images/creatures/TzHaar-Mej#Default.png new file mode 100644 index 0000000..dc55057 Binary files /dev/null and b/src/images/creatures/TzHaar-Mej#Default.png differ diff --git a/src/images/creatures/TzHaar-Xil#Melee.png b/src/images/creatures/TzHaar-Xil#Melee.png new file mode 100644 index 0000000..811c95e Binary files /dev/null and b/src/images/creatures/TzHaar-Xil#Melee.png differ diff --git a/src/images/creatures/TzHaar-Xil#Ranged.png b/src/images/creatures/TzHaar-Xil#Ranged.png new file mode 100644 index 0000000..811c95e Binary files /dev/null and b/src/images/creatures/TzHaar-Xil#Ranged.png differ diff --git a/src/images/creatures/TzKal-Zuk#Hard Mode.png b/src/images/creatures/TzKal-Zuk#Hard Mode.png new file mode 100644 index 0000000..68c5bb6 Binary files /dev/null and b/src/images/creatures/TzKal-Zuk#Hard Mode.png differ diff --git a/src/images/creatures/TzKal-Zuk#Normal Mode.png b/src/images/creatures/TzKal-Zuk#Normal Mode.png new file mode 100644 index 0000000..68c5bb6 Binary files /dev/null and b/src/images/creatures/TzKal-Zuk#Normal Mode.png differ diff --git a/src/images/creatures/TzTok-Jad#Default.png b/src/images/creatures/TzTok-Jad#Default.png new file mode 100644 index 0000000..ede3ebc Binary files /dev/null and b/src/images/creatures/TzTok-Jad#Default.png differ diff --git a/src/images/creatures/Ulthven Keith#Default.png b/src/images/creatures/Ulthven Keith#Default.png new file mode 100644 index 0000000..28bf698 Binary files /dev/null and b/src/images/creatures/Ulthven Keith#Default.png differ diff --git a/src/images/creatures/Undead Witch#Normal mode.png b/src/images/creatures/Undead Witch#Normal mode.png new file mode 100644 index 0000000..965a080 Binary files /dev/null and b/src/images/creatures/Undead Witch#Normal mode.png differ diff --git a/src/images/creatures/Undead Witch#Story mode.png b/src/images/creatures/Undead Witch#Story mode.png new file mode 100644 index 0000000..965a080 Binary files /dev/null and b/src/images/creatures/Undead Witch#Story mode.png differ diff --git a/src/images/creatures/Undead chicken#Default.png b/src/images/creatures/Undead chicken#Default.png new file mode 100644 index 0000000..6206ba4 Binary files /dev/null and b/src/images/creatures/Undead chicken#Default.png differ diff --git a/src/images/creatures/Undead cow#Default.png b/src/images/creatures/Undead cow#Default.png new file mode 100644 index 0000000..2bac17f Binary files /dev/null and b/src/images/creatures/Undead cow#Default.png differ diff --git a/src/images/creatures/Undead giant (Battle of Forinthry)#Normal mode.png b/src/images/creatures/Undead giant (Battle of Forinthry)#Normal mode.png new file mode 100644 index 0000000..7c5b695 Binary files /dev/null and b/src/images/creatures/Undead giant (Battle of Forinthry)#Normal mode.png differ diff --git a/src/images/creatures/Undead giant (Battle of Forinthry)#Story mode.png b/src/images/creatures/Undead giant (Battle of Forinthry)#Story mode.png new file mode 100644 index 0000000..7c5b695 Binary files /dev/null and b/src/images/creatures/Undead giant (Battle of Forinthry)#Story mode.png differ diff --git a/src/images/creatures/Undead one#Skeleton (level 44).png b/src/images/creatures/Undead one#Skeleton (level 44).png new file mode 100644 index 0000000..be4c475 Binary files /dev/null and b/src/images/creatures/Undead one#Skeleton (level 44).png differ diff --git a/src/images/creatures/Undead one#Skeleton (level 46).png b/src/images/creatures/Undead one#Skeleton (level 46).png new file mode 100644 index 0000000..aec16bb Binary files /dev/null and b/src/images/creatures/Undead one#Skeleton (level 46).png differ diff --git a/src/images/creatures/Undead one#Zombie (level 44).png b/src/images/creatures/Undead one#Zombie (level 44).png new file mode 100644 index 0000000..c069f12 Binary files /dev/null and b/src/images/creatures/Undead one#Zombie (level 44).png differ diff --git a/src/images/creatures/Undead one#Zombie (level 46).png b/src/images/creatures/Undead one#Zombie (level 46).png new file mode 100644 index 0000000..e2dcb53 Binary files /dev/null and b/src/images/creatures/Undead one#Zombie (level 46).png differ diff --git a/src/images/creatures/Undead pekin#Default.png b/src/images/creatures/Undead pekin#Default.png new file mode 100644 index 0000000..fb05660 Binary files /dev/null and b/src/images/creatures/Undead pekin#Default.png differ diff --git a/src/images/creatures/Undead troll#Level 77.png b/src/images/creatures/Undead troll#Level 77.png new file mode 100644 index 0000000..ba3f5ce Binary files /dev/null and b/src/images/creatures/Undead troll#Level 77.png differ diff --git a/src/images/creatures/Undead troll#Level 81 (1).png b/src/images/creatures/Undead troll#Level 81 (1).png new file mode 100644 index 0000000..dd7c40d Binary files /dev/null and b/src/images/creatures/Undead troll#Level 81 (1).png differ diff --git a/src/images/creatures/Undead troll#Level 81 (2).png b/src/images/creatures/Undead troll#Level 81 (2).png new file mode 100644 index 0000000..bdc882f Binary files /dev/null and b/src/images/creatures/Undead troll#Level 81 (2).png differ diff --git a/src/images/creatures/Undead troll#Level 81 (3).png b/src/images/creatures/Undead troll#Level 81 (3).png new file mode 100644 index 0000000..ffbed19 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 81 (3).png differ diff --git a/src/images/creatures/Undead troll#Level 81 (4).png b/src/images/creatures/Undead troll#Level 81 (4).png new file mode 100644 index 0000000..6fe5b29 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 81 (4).png differ diff --git a/src/images/creatures/Undead troll#Level 81 (5).png b/src/images/creatures/Undead troll#Level 81 (5).png new file mode 100644 index 0000000..66898c6 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 81 (5).png differ diff --git a/src/images/creatures/Undead troll#Level 86 (1).png b/src/images/creatures/Undead troll#Level 86 (1).png new file mode 100644 index 0000000..166391f Binary files /dev/null and b/src/images/creatures/Undead troll#Level 86 (1).png differ diff --git a/src/images/creatures/Undead troll#Level 86 (2).png b/src/images/creatures/Undead troll#Level 86 (2).png new file mode 100644 index 0000000..db3a8f8 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 86 (2).png differ diff --git a/src/images/creatures/Undead troll#Level 86 (3).png b/src/images/creatures/Undead troll#Level 86 (3).png new file mode 100644 index 0000000..3570b27 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 86 (3).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (1).png b/src/images/creatures/Undead troll#Level 95 (1).png new file mode 100644 index 0000000..af8e88b Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (1).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (2).png b/src/images/creatures/Undead troll#Level 95 (2).png new file mode 100644 index 0000000..11f1b8c Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (2).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (3).png b/src/images/creatures/Undead troll#Level 95 (3).png new file mode 100644 index 0000000..a3d7ea5 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (3).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (4).png b/src/images/creatures/Undead troll#Level 95 (4).png new file mode 100644 index 0000000..f817cd9 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (4).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (5).png b/src/images/creatures/Undead troll#Level 95 (5).png new file mode 100644 index 0000000..7fc99c2 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (5).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (6).png b/src/images/creatures/Undead troll#Level 95 (6).png new file mode 100644 index 0000000..45c9caf Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (6).png differ diff --git a/src/images/creatures/Undead troll#Level 95 (7).png b/src/images/creatures/Undead troll#Level 95 (7).png new file mode 100644 index 0000000..c322ae1 Binary files /dev/null and b/src/images/creatures/Undead troll#Level 95 (7).png differ diff --git a/src/images/creatures/Unspeakable horror (elite)#Default.png b/src/images/creatures/Unspeakable horror (elite)#Default.png new file mode 100644 index 0000000..a8da496 Binary files /dev/null and b/src/images/creatures/Unspeakable horror (elite)#Default.png differ diff --git a/src/images/creatures/Unspeakable horror#Default.png b/src/images/creatures/Unspeakable horror#Default.png new file mode 100644 index 0000000..a8da496 Binary files /dev/null and b/src/images/creatures/Unspeakable horror#Default.png differ diff --git a/src/images/creatures/Unstable glacyte#Default.png b/src/images/creatures/Unstable glacyte#Default.png new file mode 100644 index 0000000..5017253 Binary files /dev/null and b/src/images/creatures/Unstable glacyte#Default.png differ diff --git a/src/images/creatures/Unstable zombie#Ancient Awakening.png b/src/images/creatures/Unstable zombie#Ancient Awakening.png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/src/images/creatures/Unstable zombie#Ancient Awakening.png differ diff --git a/src/images/creatures/Unstable zombie#Ungael combat activity (hard).png b/src/images/creatures/Unstable zombie#Ungael combat activity (hard).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/src/images/creatures/Unstable zombie#Ungael combat activity (hard).png differ diff --git a/src/images/creatures/Unstable zombie#Ungael combat activity (standard).png b/src/images/creatures/Unstable zombie#Ungael combat activity (standard).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/src/images/creatures/Unstable zombie#Ungael combat activity (standard).png differ diff --git a/src/images/creatures/Vampyre Juvenile#Burgh de Rott.png b/src/images/creatures/Vampyre Juvenile#Burgh de Rott.png new file mode 100644 index 0000000..3689dd7 Binary files /dev/null and b/src/images/creatures/Vampyre Juvenile#Burgh de Rott.png differ diff --git a/src/images/creatures/Vampyre Juvenile#Meiyerditch.png b/src/images/creatures/Vampyre Juvenile#Meiyerditch.png new file mode 100644 index 0000000..4bf51af Binary files /dev/null and b/src/images/creatures/Vampyre Juvenile#Meiyerditch.png differ diff --git a/src/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 58).png b/src/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 58).png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/src/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 58).png differ diff --git a/src/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 63).png b/src/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 63).png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/src/images/creatures/Vampyre Juvinate#Burgh de Rott (Level 63).png differ diff --git a/src/images/creatures/Vampyre Juvinate#Darkmeyer.png b/src/images/creatures/Vampyre Juvinate#Darkmeyer.png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/src/images/creatures/Vampyre Juvinate#Darkmeyer.png differ diff --git a/src/images/creatures/Vampyre Juvinate#Meiyerditch.png b/src/images/creatures/Vampyre Juvinate#Meiyerditch.png new file mode 100644 index 0000000..d7a468d Binary files /dev/null and b/src/images/creatures/Vampyre Juvinate#Meiyerditch.png differ diff --git a/src/images/creatures/Vampyre#Default.png b/src/images/creatures/Vampyre#Default.png new file mode 100644 index 0000000..bd19b83 Binary files /dev/null and b/src/images/creatures/Vampyre#Default.png differ diff --git a/src/images/creatures/Veil-ripper Ozharakha#Default.png b/src/images/creatures/Veil-ripper Ozharakha#Default.png new file mode 100644 index 0000000..f16467e Binary files /dev/null and b/src/images/creatures/Veil-ripper Ozharakha#Default.png differ diff --git a/src/images/creatures/Venomous dinosaur#Dinosaur invasion.png b/src/images/creatures/Venomous dinosaur#Dinosaur invasion.png new file mode 100644 index 0000000..52a569e Binary files /dev/null and b/src/images/creatures/Venomous dinosaur#Dinosaur invasion.png differ diff --git a/src/images/creatures/Venomous dinosaur#Normal.png b/src/images/creatures/Venomous dinosaur#Normal.png new file mode 100644 index 0000000..52a569e Binary files /dev/null and b/src/images/creatures/Venomous dinosaur#Normal.png differ diff --git a/src/images/creatures/Verac the Defiled#Normal.png b/src/images/creatures/Verac the Defiled#Normal.png new file mode 100644 index 0000000..d6147eb Binary files /dev/null and b/src/images/creatures/Verac the Defiled#Normal.png differ diff --git a/src/images/creatures/Verac the Defiled#Rise of the Six.png b/src/images/creatures/Verac the Defiled#Rise of the Six.png new file mode 100644 index 0000000..3cce753 Binary files /dev/null and b/src/images/creatures/Verac the Defiled#Rise of the Six.png differ diff --git a/src/images/creatures/Verak Lith#Default.png b/src/images/creatures/Verak Lith#Default.png new file mode 100644 index 0000000..4c6b337 Binary files /dev/null and b/src/images/creatures/Verak Lith#Default.png differ diff --git a/src/images/creatures/Verak Little#Default.png b/src/images/creatures/Verak Little#Default.png new file mode 100644 index 0000000..6f68132 Binary files /dev/null and b/src/images/creatures/Verak Little#Default.png differ diff --git a/src/images/creatures/Vindicta#Hard mode.png b/src/images/creatures/Vindicta#Hard mode.png new file mode 100644 index 0000000..e669391 Binary files /dev/null and b/src/images/creatures/Vindicta#Hard mode.png differ diff --git a/src/images/creatures/Vindicta#Normal mode.png b/src/images/creatures/Vindicta#Normal mode.png new file mode 100644 index 0000000..e669391 Binary files /dev/null and b/src/images/creatures/Vindicta#Normal mode.png differ diff --git a/src/images/creatures/Vinecrawler#Default.png b/src/images/creatures/Vinecrawler#Default.png new file mode 100644 index 0000000..bf7f3e8 Binary files /dev/null and b/src/images/creatures/Vinecrawler#Default.png differ diff --git a/src/images/creatures/Vorago#Default.png b/src/images/creatures/Vorago#Default.png new file mode 100644 index 0000000..8eafb50 Binary files /dev/null and b/src/images/creatures/Vorago#Default.png differ diff --git a/src/images/creatures/Vorkath#Hard mode.png b/src/images/creatures/Vorkath#Hard mode.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/src/images/creatures/Vorkath#Hard mode.png differ diff --git a/src/images/creatures/Vorkath#Normal mode.png b/src/images/creatures/Vorkath#Normal mode.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/src/images/creatures/Vorkath#Normal mode.png differ diff --git a/src/images/creatures/Vorkath#Requiem for a Dragon.png b/src/images/creatures/Vorkath#Requiem for a Dragon.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/src/images/creatures/Vorkath#Requiem for a Dragon.png differ diff --git a/src/images/creatures/Vorkath#Story mode.png b/src/images/creatures/Vorkath#Story mode.png new file mode 100644 index 0000000..8b8ec07 Binary files /dev/null and b/src/images/creatures/Vorkath#Story mode.png differ diff --git a/src/images/creatures/Vyrelady#1.png b/src/images/creatures/Vyrelady#1.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/src/images/creatures/Vyrelady#1.png differ diff --git a/src/images/creatures/Vyrelady#2.png b/src/images/creatures/Vyrelady#2.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/src/images/creatures/Vyrelady#2.png differ diff --git a/src/images/creatures/Vyrelady#3.png b/src/images/creatures/Vyrelady#3.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/src/images/creatures/Vyrelady#3.png differ diff --git a/src/images/creatures/Vyrelady#4.png b/src/images/creatures/Vyrelady#4.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/src/images/creatures/Vyrelady#4.png differ diff --git a/src/images/creatures/Vyrelady#5.png b/src/images/creatures/Vyrelady#5.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/src/images/creatures/Vyrelady#5.png differ diff --git a/src/images/creatures/Vyrelady#6.png b/src/images/creatures/Vyrelady#6.png new file mode 100644 index 0000000..cb8621c Binary files /dev/null and b/src/images/creatures/Vyrelady#6.png differ diff --git a/src/images/creatures/Vyrelord#1.png b/src/images/creatures/Vyrelord#1.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/src/images/creatures/Vyrelord#1.png differ diff --git a/src/images/creatures/Vyrelord#2.png b/src/images/creatures/Vyrelord#2.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/src/images/creatures/Vyrelord#2.png differ diff --git a/src/images/creatures/Vyrelord#3.png b/src/images/creatures/Vyrelord#3.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/src/images/creatures/Vyrelord#3.png differ diff --git a/src/images/creatures/Vyrelord#4.png b/src/images/creatures/Vyrelord#4.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/src/images/creatures/Vyrelord#4.png differ diff --git a/src/images/creatures/Vyrelord#5.png b/src/images/creatures/Vyrelord#5.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/src/images/creatures/Vyrelord#5.png differ diff --git a/src/images/creatures/Vyrelord#6.png b/src/images/creatures/Vyrelord#6.png new file mode 100644 index 0000000..6427ffd Binary files /dev/null and b/src/images/creatures/Vyrelord#6.png differ diff --git a/src/images/creatures/Vyrewatch#Level 70 (East of Burgh de Rott).png b/src/images/creatures/Vyrewatch#Level 70 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 70 (East of Burgh de Rott).png differ diff --git a/src/images/creatures/Vyrewatch#Level 70.png b/src/images/creatures/Vyrewatch#Level 70.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 70.png differ diff --git a/src/images/creatures/Vyrewatch#Level 72 (East of Burgh de Rott).png b/src/images/creatures/Vyrewatch#Level 72 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 72 (East of Burgh de Rott).png differ diff --git a/src/images/creatures/Vyrewatch#Level 72.png b/src/images/creatures/Vyrewatch#Level 72.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 72.png differ diff --git a/src/images/creatures/Vyrewatch#Level 75 (East of Burgh de Rott).png b/src/images/creatures/Vyrewatch#Level 75 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 75 (East of Burgh de Rott).png differ diff --git a/src/images/creatures/Vyrewatch#Level 75.png b/src/images/creatures/Vyrewatch#Level 75.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 75.png differ diff --git a/src/images/creatures/Vyrewatch#Level 78 (East of Burgh de Rott).png b/src/images/creatures/Vyrewatch#Level 78 (East of Burgh de Rott).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 78 (East of Burgh de Rott).png differ diff --git a/src/images/creatures/Vyrewatch#Level 78.png b/src/images/creatures/Vyrewatch#Level 78.png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 78.png differ diff --git a/src/images/creatures/Vyrewatch#Level 86.png b/src/images/creatures/Vyrewatch#Level 86.png new file mode 100644 index 0000000..56b5c12 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 86.png differ diff --git a/src/images/creatures/Vyrewatch#Level 91.png b/src/images/creatures/Vyrewatch#Level 91.png new file mode 100644 index 0000000..56b5c12 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Level 91.png differ diff --git a/src/images/creatures/Vyrewatch#Temple Trekking (Easy Route).png b/src/images/creatures/Vyrewatch#Temple Trekking (Easy Route).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Temple Trekking (Easy Route).png differ diff --git a/src/images/creatures/Vyrewatch#Temple Trekking (Hard Route).png b/src/images/creatures/Vyrewatch#Temple Trekking (Hard Route).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Temple Trekking (Hard Route).png differ diff --git a/src/images/creatures/Vyrewatch#Temple Trekking (Medium Route).png b/src/images/creatures/Vyrewatch#Temple Trekking (Medium Route).png new file mode 100644 index 0000000..7ff6aa0 Binary files /dev/null and b/src/images/creatures/Vyrewatch#Temple Trekking (Medium Route).png differ diff --git a/src/images/creatures/Wall beast#Default.png b/src/images/creatures/Wall beast#Default.png new file mode 100644 index 0000000..deae076 Binary files /dev/null and b/src/images/creatures/Wall beast#Default.png differ diff --git a/src/images/creatures/Warped bat#Default.png b/src/images/creatures/Warped bat#Default.png new file mode 100644 index 0000000..b955679 Binary files /dev/null and b/src/images/creatures/Warped bat#Default.png differ diff --git a/src/images/creatures/Warped cockroach#Default.png b/src/images/creatures/Warped cockroach#Default.png new file mode 100644 index 0000000..4c39d5d Binary files /dev/null and b/src/images/creatures/Warped cockroach#Default.png differ diff --git a/src/images/creatures/Warped rat#Default.png b/src/images/creatures/Warped rat#Default.png new file mode 100644 index 0000000..f88c8eb Binary files /dev/null and b/src/images/creatures/Warped rat#Default.png differ diff --git a/src/images/creatures/Warped skeleton#Normal mode.png b/src/images/creatures/Warped skeleton#Normal mode.png new file mode 100644 index 0000000..ef2e08b Binary files /dev/null and b/src/images/creatures/Warped skeleton#Normal mode.png differ diff --git a/src/images/creatures/Warped skeleton#Story mode.png b/src/images/creatures/Warped skeleton#Story mode.png new file mode 100644 index 0000000..823314f Binary files /dev/null and b/src/images/creatures/Warped skeleton#Story mode.png differ diff --git a/src/images/creatures/Warped terrorbird#1 (chimed).png b/src/images/creatures/Warped terrorbird#1 (chimed).png new file mode 100644 index 0000000..fd3ea33 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#1 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#1.png b/src/images/creatures/Warped terrorbird#1.png new file mode 100644 index 0000000..c16cf3a Binary files /dev/null and b/src/images/creatures/Warped terrorbird#1.png differ diff --git a/src/images/creatures/Warped terrorbird#10 (chimed).png b/src/images/creatures/Warped terrorbird#10 (chimed).png new file mode 100644 index 0000000..8c385eb Binary files /dev/null and b/src/images/creatures/Warped terrorbird#10 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#10.png b/src/images/creatures/Warped terrorbird#10.png new file mode 100644 index 0000000..b8421b1 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#10.png differ diff --git a/src/images/creatures/Warped terrorbird#2 (chimed).png b/src/images/creatures/Warped terrorbird#2 (chimed).png new file mode 100644 index 0000000..573ca0b Binary files /dev/null and b/src/images/creatures/Warped terrorbird#2 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#2.png b/src/images/creatures/Warped terrorbird#2.png new file mode 100644 index 0000000..7ee382e Binary files /dev/null and b/src/images/creatures/Warped terrorbird#2.png differ diff --git a/src/images/creatures/Warped terrorbird#3 (chimed).png b/src/images/creatures/Warped terrorbird#3 (chimed).png new file mode 100644 index 0000000..2d9f70b Binary files /dev/null and b/src/images/creatures/Warped terrorbird#3 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#3.png b/src/images/creatures/Warped terrorbird#3.png new file mode 100644 index 0000000..3728789 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#3.png differ diff --git a/src/images/creatures/Warped terrorbird#4 (chimed).png b/src/images/creatures/Warped terrorbird#4 (chimed).png new file mode 100644 index 0000000..19bd015 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#4 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#4.png b/src/images/creatures/Warped terrorbird#4.png new file mode 100644 index 0000000..72c8301 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#4.png differ diff --git a/src/images/creatures/Warped terrorbird#5 (chimed).png b/src/images/creatures/Warped terrorbird#5 (chimed).png new file mode 100644 index 0000000..a2a2192 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#5 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#5.png b/src/images/creatures/Warped terrorbird#5.png new file mode 100644 index 0000000..181a9f5 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#5.png differ diff --git a/src/images/creatures/Warped terrorbird#6 (chimed).png b/src/images/creatures/Warped terrorbird#6 (chimed).png new file mode 100644 index 0000000..9cf1294 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#6 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#6.png b/src/images/creatures/Warped terrorbird#6.png new file mode 100644 index 0000000..8900e46 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#6.png differ diff --git a/src/images/creatures/Warped terrorbird#7 (chimed).png b/src/images/creatures/Warped terrorbird#7 (chimed).png new file mode 100644 index 0000000..813c887 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#7 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#7.png b/src/images/creatures/Warped terrorbird#7.png new file mode 100644 index 0000000..3798c3c Binary files /dev/null and b/src/images/creatures/Warped terrorbird#7.png differ diff --git a/src/images/creatures/Warped terrorbird#8 (chimed).png b/src/images/creatures/Warped terrorbird#8 (chimed).png new file mode 100644 index 0000000..5433465 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#8 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#8.png b/src/images/creatures/Warped terrorbird#8.png new file mode 100644 index 0000000..22ca145 Binary files /dev/null and b/src/images/creatures/Warped terrorbird#8.png differ diff --git a/src/images/creatures/Warped terrorbird#9 (chimed).png b/src/images/creatures/Warped terrorbird#9 (chimed).png new file mode 100644 index 0000000..4fd501e Binary files /dev/null and b/src/images/creatures/Warped terrorbird#9 (chimed).png differ diff --git a/src/images/creatures/Warped terrorbird#9.png b/src/images/creatures/Warped terrorbird#9.png new file mode 100644 index 0000000..1c58a6b Binary files /dev/null and b/src/images/creatures/Warped terrorbird#9.png differ diff --git a/src/images/creatures/Warped tortoise#Immune.png b/src/images/creatures/Warped tortoise#Immune.png new file mode 100644 index 0000000..b1ca5b3 Binary files /dev/null and b/src/images/creatures/Warped tortoise#Immune.png differ diff --git a/src/images/creatures/Warped tortoise#Vulnerable.png b/src/images/creatures/Warped tortoise#Vulnerable.png new file mode 100644 index 0000000..77889d5 Binary files /dev/null and b/src/images/creatures/Warped tortoise#Vulnerable.png differ diff --git a/src/images/creatures/Waterfiend (Ghorrock)#102.png b/src/images/creatures/Waterfiend (Ghorrock)#102.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/src/images/creatures/Waterfiend (Ghorrock)#102.png differ diff --git a/src/images/creatures/Waterfiend (Ghorrock)#107.png b/src/images/creatures/Waterfiend (Ghorrock)#107.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/src/images/creatures/Waterfiend (Ghorrock)#107.png differ diff --git a/src/images/creatures/Waterfiend (Temple of Aminishi)#Normal mode.png b/src/images/creatures/Waterfiend (Temple of Aminishi)#Normal mode.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/src/images/creatures/Waterfiend (Temple of Aminishi)#Normal mode.png differ diff --git a/src/images/creatures/Waterfiend (Temple of Aminishi)#Story mode.png b/src/images/creatures/Waterfiend (Temple of Aminishi)#Story mode.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/src/images/creatures/Waterfiend (Temple of Aminishi)#Story mode.png differ diff --git a/src/images/creatures/Waterfiend (The Zamorakian Undercity)#Default.png b/src/images/creatures/Waterfiend (The Zamorakian Undercity)#Default.png new file mode 100644 index 0000000..9fff216 Binary files /dev/null and b/src/images/creatures/Waterfiend (The Zamorakian Undercity)#Default.png differ diff --git a/src/images/creatures/Waterfiend (elite)#Ancient Cavern.png b/src/images/creatures/Waterfiend (elite)#Ancient Cavern.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/src/images/creatures/Waterfiend (elite)#Ancient Cavern.png differ diff --git a/src/images/creatures/Waterfiend (elite)#Ghorrock.png b/src/images/creatures/Waterfiend (elite)#Ghorrock.png new file mode 100644 index 0000000..40e2992 Binary files /dev/null and b/src/images/creatures/Waterfiend (elite)#Ghorrock.png differ diff --git a/src/images/creatures/Waterfiend (summoned)#Default.png b/src/images/creatures/Waterfiend (summoned)#Default.png new file mode 100644 index 0000000..4668e88 Binary files /dev/null and b/src/images/creatures/Waterfiend (summoned)#Default.png differ diff --git a/src/images/creatures/Waterfiend#Default.png b/src/images/creatures/Waterfiend#Default.png new file mode 100644 index 0000000..fa7e010 Binary files /dev/null and b/src/images/creatures/Waterfiend#Default.png differ diff --git a/src/images/creatures/Werewolf#Alexis.png b/src/images/creatures/Werewolf#Alexis.png new file mode 100644 index 0000000..1bfde38 Binary files /dev/null and b/src/images/creatures/Werewolf#Alexis.png differ diff --git a/src/images/creatures/Werewolf#Boris.png b/src/images/creatures/Werewolf#Boris.png new file mode 100644 index 0000000..d5dcd17 Binary files /dev/null and b/src/images/creatures/Werewolf#Boris.png differ diff --git a/src/images/creatures/Werewolf#Eduard.png b/src/images/creatures/Werewolf#Eduard.png new file mode 100644 index 0000000..80239c9 Binary files /dev/null and b/src/images/creatures/Werewolf#Eduard.png differ diff --git a/src/images/creatures/Werewolf#Galina.png b/src/images/creatures/Werewolf#Galina.png new file mode 100644 index 0000000..0ee5f6f Binary files /dev/null and b/src/images/creatures/Werewolf#Galina.png differ diff --git a/src/images/creatures/Werewolf#Georgy.png b/src/images/creatures/Werewolf#Georgy.png new file mode 100644 index 0000000..2567652 Binary files /dev/null and b/src/images/creatures/Werewolf#Georgy.png differ diff --git a/src/images/creatures/Werewolf#God Wars Dungeon (female).png b/src/images/creatures/Werewolf#God Wars Dungeon (female).png new file mode 100644 index 0000000..779de01 Binary files /dev/null and b/src/images/creatures/Werewolf#God Wars Dungeon (female).png differ diff --git a/src/images/creatures/Werewolf#God Wars Dungeon (male).png b/src/images/creatures/Werewolf#God Wars Dungeon (male).png new file mode 100644 index 0000000..3e35028 Binary files /dev/null and b/src/images/creatures/Werewolf#God Wars Dungeon (male).png differ diff --git a/src/images/creatures/Werewolf#Imre.png b/src/images/creatures/Werewolf#Imre.png new file mode 100644 index 0000000..4884c5a Binary files /dev/null and b/src/images/creatures/Werewolf#Imre.png differ diff --git a/src/images/creatures/Werewolf#Irina.png b/src/images/creatures/Werewolf#Irina.png new file mode 100644 index 0000000..1a6cd97 Binary files /dev/null and b/src/images/creatures/Werewolf#Irina.png differ diff --git a/src/images/creatures/Werewolf#Joseph.png b/src/images/creatures/Werewolf#Joseph.png new file mode 100644 index 0000000..793da70 Binary files /dev/null and b/src/images/creatures/Werewolf#Joseph.png differ diff --git a/src/images/creatures/Werewolf#Ksenia.png b/src/images/creatures/Werewolf#Ksenia.png new file mode 100644 index 0000000..8373eaf Binary files /dev/null and b/src/images/creatures/Werewolf#Ksenia.png differ diff --git a/src/images/creatures/Werewolf#Lev.png b/src/images/creatures/Werewolf#Lev.png new file mode 100644 index 0000000..1df6607 Binary files /dev/null and b/src/images/creatures/Werewolf#Lev.png differ diff --git a/src/images/creatures/Werewolf#Liliya.png b/src/images/creatures/Werewolf#Liliya.png new file mode 100644 index 0000000..8fc68bf Binary files /dev/null and b/src/images/creatures/Werewolf#Liliya.png differ diff --git a/src/images/creatures/Werewolf#Milla.png b/src/images/creatures/Werewolf#Milla.png new file mode 100644 index 0000000..375b31b Binary files /dev/null and b/src/images/creatures/Werewolf#Milla.png differ diff --git a/src/images/creatures/Werewolf#Nikita.png b/src/images/creatures/Werewolf#Nikita.png new file mode 100644 index 0000000..5a76f6b Binary files /dev/null and b/src/images/creatures/Werewolf#Nikita.png differ diff --git a/src/images/creatures/Werewolf#Nikolai.png b/src/images/creatures/Werewolf#Nikolai.png new file mode 100644 index 0000000..ae78e0a Binary files /dev/null and b/src/images/creatures/Werewolf#Nikolai.png differ diff --git a/src/images/creatures/Werewolf#Sofiya.png b/src/images/creatures/Werewolf#Sofiya.png new file mode 100644 index 0000000..c3c5df4 Binary files /dev/null and b/src/images/creatures/Werewolf#Sofiya.png differ diff --git a/src/images/creatures/Werewolf#Svetlana.png b/src/images/creatures/Werewolf#Svetlana.png new file mode 100644 index 0000000..0775c7b Binary files /dev/null and b/src/images/creatures/Werewolf#Svetlana.png differ diff --git a/src/images/creatures/Werewolf#Vera.png b/src/images/creatures/Werewolf#Vera.png new file mode 100644 index 0000000..bbd61b5 Binary files /dev/null and b/src/images/creatures/Werewolf#Vera.png differ diff --git a/src/images/creatures/Werewolf#Yadviga.png b/src/images/creatures/Werewolf#Yadviga.png new file mode 100644 index 0000000..a8cab0a Binary files /dev/null and b/src/images/creatures/Werewolf#Yadviga.png differ diff --git a/src/images/creatures/Werewolf#Yuri.png b/src/images/creatures/Werewolf#Yuri.png new file mode 100644 index 0000000..985c854 Binary files /dev/null and b/src/images/creatures/Werewolf#Yuri.png differ diff --git a/src/images/creatures/Werewolf#Zoja.png b/src/images/creatures/Werewolf#Zoja.png new file mode 100644 index 0000000..b170899 Binary files /dev/null and b/src/images/creatures/Werewolf#Zoja.png differ diff --git a/src/images/creatures/White wolf#Default.png b/src/images/creatures/White wolf#Default.png new file mode 100644 index 0000000..f4c6da2 Binary files /dev/null and b/src/images/creatures/White wolf#Default.png differ diff --git a/src/images/creatures/Wight (Missing, Presumed Death)#Default.png b/src/images/creatures/Wight (Missing, Presumed Death)#Default.png new file mode 100644 index 0000000..1c39faa Binary files /dev/null and b/src/images/creatures/Wight (Missing, Presumed Death)#Default.png differ diff --git a/src/images/creatures/Wight ranger (Sliske's Endgame)#78 (Weak in slash).png b/src/images/creatures/Wight ranger (Sliske's Endgame)#78 (Weak in slash).png new file mode 100644 index 0000000..1df2d3a Binary files /dev/null and b/src/images/creatures/Wight ranger (Sliske's Endgame)#78 (Weak in slash).png differ diff --git a/src/images/creatures/Wight ranger (Sliske's Endgame)#78.png b/src/images/creatures/Wight ranger (Sliske's Endgame)#78.png new file mode 100644 index 0000000..1df2d3a Binary files /dev/null and b/src/images/creatures/Wight ranger (Sliske's Endgame)#78.png differ diff --git a/src/images/creatures/Wight ranger (Sliske's Endgame)#85.png b/src/images/creatures/Wight ranger (Sliske's Endgame)#85.png new file mode 100644 index 0000000..1df2d3a Binary files /dev/null and b/src/images/creatures/Wight ranger (Sliske's Endgame)#85.png differ diff --git a/src/images/creatures/Wight ranger#Default.png b/src/images/creatures/Wight ranger#Default.png new file mode 100644 index 0000000..595f2f7 Binary files /dev/null and b/src/images/creatures/Wight ranger#Default.png differ diff --git a/src/images/creatures/Wight#Default.png b/src/images/creatures/Wight#Default.png new file mode 100644 index 0000000..ab49025 Binary files /dev/null and b/src/images/creatures/Wight#Default.png differ diff --git a/src/images/creatures/Wild dog#Default.png b/src/images/creatures/Wild dog#Default.png new file mode 100644 index 0000000..a36b600 Binary files /dev/null and b/src/images/creatures/Wild dog#Default.png differ diff --git a/src/images/creatures/WildyWyrm (2015, historical)#Default.png b/src/images/creatures/WildyWyrm (2015, historical)#Default.png new file mode 100644 index 0000000..fabdb27 Binary files /dev/null and b/src/images/creatures/WildyWyrm (2015, historical)#Default.png differ diff --git a/src/images/creatures/Wingman Skree#Default.png b/src/images/creatures/Wingman Skree#Default.png new file mode 100644 index 0000000..ec70595 Binary files /dev/null and b/src/images/creatures/Wingman Skree#Default.png differ diff --git a/src/images/creatures/Wolf#Level 11 (1).png b/src/images/creatures/Wolf#Level 11 (1).png new file mode 100644 index 0000000..67eb414 Binary files /dev/null and b/src/images/creatures/Wolf#Level 11 (1).png differ diff --git a/src/images/creatures/Wolf#Level 11 (2).png b/src/images/creatures/Wolf#Level 11 (2).png new file mode 100644 index 0000000..67eb414 Binary files /dev/null and b/src/images/creatures/Wolf#Level 11 (2).png differ diff --git a/src/images/creatures/Wolf#Level 8 (1).png b/src/images/creatures/Wolf#Level 8 (1).png new file mode 100644 index 0000000..6fd684c Binary files /dev/null and b/src/images/creatures/Wolf#Level 8 (1).png differ diff --git a/src/images/creatures/Wolf#Level 8 (2).png b/src/images/creatures/Wolf#Level 8 (2).png new file mode 100644 index 0000000..6e87e9e Binary files /dev/null and b/src/images/creatures/Wolf#Level 8 (2).png differ diff --git a/src/images/creatures/Wyvern (elite)#Default.png b/src/images/creatures/Wyvern (elite)#Default.png new file mode 100644 index 0000000..60a99da Binary files /dev/null and b/src/images/creatures/Wyvern (elite)#Default.png differ diff --git a/src/images/creatures/Wyvern#Default.png b/src/images/creatures/Wyvern#Default.png new file mode 100644 index 0000000..60a99da Binary files /dev/null and b/src/images/creatures/Wyvern#Default.png differ diff --git a/src/images/creatures/Yor'Ger the Deceiver#Normal mode.png b/src/images/creatures/Yor'Ger the Deceiver#Normal mode.png new file mode 100644 index 0000000..bb63a7a Binary files /dev/null and b/src/images/creatures/Yor'Ger the Deceiver#Normal mode.png differ diff --git a/src/images/creatures/Yor'Ger the Deceiver#Story mode.png b/src/images/creatures/Yor'Ger the Deceiver#Story mode.png new file mode 100644 index 0000000..bb63a7a Binary files /dev/null and b/src/images/creatures/Yor'Ger the Deceiver#Story mode.png differ diff --git a/src/images/creatures/Young grotworm#Default.png b/src/images/creatures/Young grotworm#Default.png new file mode 100644 index 0000000..b1636e3 Binary files /dev/null and b/src/images/creatures/Young grotworm#Default.png differ diff --git a/src/images/creatures/Zakl'n Gritch#Default.png b/src/images/creatures/Zakl'n Gritch#Default.png new file mode 100644 index 0000000..3ab51de Binary files /dev/null and b/src/images/creatures/Zakl'n Gritch#Default.png differ diff --git a/src/images/creatures/Zamorak, Lord of Chaos#Hard mode.png b/src/images/creatures/Zamorak, Lord of Chaos#Hard mode.png new file mode 100644 index 0000000..f16a796 Binary files /dev/null and b/src/images/creatures/Zamorak, Lord of Chaos#Hard mode.png differ diff --git a/src/images/creatures/Zamorak, Lord of Chaos#Normal mode.png b/src/images/creatures/Zamorak, Lord of Chaos#Normal mode.png new file mode 100644 index 0000000..f16a796 Binary files /dev/null and b/src/images/creatures/Zamorak, Lord of Chaos#Normal mode.png differ diff --git a/src/images/creatures/Zamorak, Lord of Chaos#Story mode.png b/src/images/creatures/Zamorak, Lord of Chaos#Story mode.png new file mode 100644 index 0000000..f16a796 Binary files /dev/null and b/src/images/creatures/Zamorak, Lord of Chaos#Story mode.png differ diff --git a/src/images/creatures/Zemouregal#Ancient Awakening.png b/src/images/creatures/Zemouregal#Ancient Awakening.png new file mode 100644 index 0000000..f3b951c Binary files /dev/null and b/src/images/creatures/Zemouregal#Ancient Awakening.png differ diff --git a/src/images/creatures/Zemouregal#Battle of Forinthry.png b/src/images/creatures/Zemouregal#Battle of Forinthry.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Battle of Forinthry.png differ diff --git a/src/images/creatures/Zemouregal#Children of Mah (Freneskae cutscene).png b/src/images/creatures/Zemouregal#Children of Mah (Freneskae cutscene).png new file mode 100644 index 0000000..299c687 Binary files /dev/null and b/src/images/creatures/Zemouregal#Children of Mah (Freneskae cutscene).png differ diff --git a/src/images/creatures/Zemouregal#Children of Mah (examinable).png b/src/images/creatures/Zemouregal#Children of Mah (examinable).png new file mode 100644 index 0000000..65c274c Binary files /dev/null and b/src/images/creatures/Zemouregal#Children of Mah (examinable).png differ diff --git a/src/images/creatures/Zemouregal#Children of Mah.png b/src/images/creatures/Zemouregal#Children of Mah.png new file mode 100644 index 0000000..7ef4ecd Binary files /dev/null and b/src/images/creatures/Zemouregal#Children of Mah.png differ diff --git a/src/images/creatures/Zemouregal#Daughter of Chaos.png b/src/images/creatures/Zemouregal#Daughter of Chaos.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Daughter of Chaos.png differ diff --git a/src/images/creatures/Zemouregal#Dead and Buried.png b/src/images/creatures/Zemouregal#Dead and Buried.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Dead and Buried.png differ diff --git a/src/images/creatures/Zemouregal#Defender of Varrock (1).png b/src/images/creatures/Zemouregal#Defender of Varrock (1).png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Defender of Varrock (1).png differ diff --git a/src/images/creatures/Zemouregal#Defender of Varrock (2).png b/src/images/creatures/Zemouregal#Defender of Varrock (2).png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Defender of Varrock (2).png differ diff --git a/src/images/creatures/Zemouregal#Dimension of Disaster.png b/src/images/creatures/Zemouregal#Dimension of Disaster.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Dimension of Disaster.png differ diff --git a/src/images/creatures/Zemouregal#Dishonour among Thieves (cutscene).png b/src/images/creatures/Zemouregal#Dishonour among Thieves (cutscene).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Dishonour among Thieves (cutscene).png differ diff --git a/src/images/creatures/Zemouregal#Dishonour among Thieves (lair).png b/src/images/creatures/Zemouregal#Dishonour among Thieves (lair).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Dishonour among Thieves (lair).png differ diff --git a/src/images/creatures/Zemouregal#Dishonour among Thieves (lair, examinable).png b/src/images/creatures/Zemouregal#Dishonour among Thieves (lair, examinable).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Dishonour among Thieves (lair, examinable).png differ diff --git a/src/images/creatures/Zemouregal#Dishonour among Thieves.png b/src/images/creatures/Zemouregal#Dishonour among Thieves.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Dishonour among Thieves.png differ diff --git a/src/images/creatures/Zemouregal#Missing, Presumed Death.png b/src/images/creatures/Zemouregal#Missing, Presumed Death.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Missing, Presumed Death.png differ diff --git a/src/images/creatures/Zemouregal#Nadir.png b/src/images/creatures/Zemouregal#Nadir.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Nadir.png differ diff --git a/src/images/creatures/Zemouregal#Requiem for a Dragon.png b/src/images/creatures/Zemouregal#Requiem for a Dragon.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Requiem for a Dragon.png differ diff --git a/src/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort).png b/src/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort).png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort).png differ diff --git a/src/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort, skeletal).png b/src/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort, skeletal).png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Ritual of the Mahjarrat (fort, skeletal).png differ diff --git a/src/images/creatures/Zemouregal#Ritual of the Mahjarrat.png b/src/images/creatures/Zemouregal#Ritual of the Mahjarrat.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Ritual of the Mahjarrat.png differ diff --git a/src/images/creatures/Zemouregal#Succession (skeletal).png b/src/images/creatures/Zemouregal#Succession (skeletal).png new file mode 100644 index 0000000..f09cb9d Binary files /dev/null and b/src/images/creatures/Zemouregal#Succession (skeletal).png differ diff --git a/src/images/creatures/Zemouregal#Succession.png b/src/images/creatures/Zemouregal#Succession.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#Succession.png differ diff --git a/src/images/creatures/Zemouregal#The World Wakes.png b/src/images/creatures/Zemouregal#The World Wakes.png new file mode 100644 index 0000000..ae06e49 Binary files /dev/null and b/src/images/creatures/Zemouregal#The World Wakes.png differ diff --git a/src/images/creatures/Zemouregal#TzekHaar Front.png b/src/images/creatures/Zemouregal#TzekHaar Front.png new file mode 100644 index 0000000..04e1274 Binary files /dev/null and b/src/images/creatures/Zemouregal#TzekHaar Front.png differ diff --git a/src/images/creatures/Zemouregal#Unwelcome Guests.png b/src/images/creatures/Zemouregal#Unwelcome Guests.png new file mode 100644 index 0000000..08d9bd1 Binary files /dev/null and b/src/images/creatures/Zemouregal#Unwelcome Guests.png differ diff --git a/src/images/creatures/Zogre#1.png b/src/images/creatures/Zogre#1.png new file mode 100644 index 0000000..8d6296f Binary files /dev/null and b/src/images/creatures/Zogre#1.png differ diff --git a/src/images/creatures/Zogre#2.png b/src/images/creatures/Zogre#2.png new file mode 100644 index 0000000..8502d10 Binary files /dev/null and b/src/images/creatures/Zogre#2.png differ diff --git a/src/images/creatures/Zogre#3.png b/src/images/creatures/Zogre#3.png new file mode 100644 index 0000000..9d112c4 Binary files /dev/null and b/src/images/creatures/Zogre#3.png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#72.png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#72.png new file mode 100644 index 0000000..92d156d Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#72.png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (1).png new file mode 100644 index 0000000..c5d5eef Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (2).png new file mode 100644 index 0000000..9f83c51 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#74 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (1).png new file mode 100644 index 0000000..06de319 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (2).png new file mode 100644 index 0000000..2ba2330 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#75 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (1).png new file mode 100644 index 0000000..e76e09e Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (2).png new file mode 100644 index 0000000..28af945 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#77 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (1).png new file mode 100644 index 0000000..7a96aea Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (2).png new file mode 100644 index 0000000..0944563 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#78 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (1).png new file mode 100644 index 0000000..b262592 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (2).png new file mode 100644 index 0000000..b303cd0 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#79 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (1).png new file mode 100644 index 0000000..2f34518 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (2).png new file mode 100644 index 0000000..f46a419 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (3).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (3).png new file mode 100644 index 0000000..eaf1839 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#82 (3).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (1).png new file mode 100644 index 0000000..5c94a21 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (2).png new file mode 100644 index 0000000..9a57651 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#84 (2).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (1).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (1).png new file mode 100644 index 0000000..658cc42 Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (1).png differ diff --git a/src/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (2).png b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (2).png new file mode 100644 index 0000000..c25286e Binary files /dev/null and b/src/images/creatures/Zombie (Lair of Tarn Razorlor)#85 (2).png differ diff --git a/src/images/creatures/Zombie (New Varrock)#Default.png b/src/images/creatures/Zombie (New Varrock)#Default.png new file mode 100644 index 0000000..3da8c1e Binary files /dev/null and b/src/images/creatures/Zombie (New Varrock)#Default.png differ diff --git a/src/images/creatures/Zombie (Stronghold of Security)#Level 12.png b/src/images/creatures/Zombie (Stronghold of Security)#Level 12.png new file mode 100644 index 0000000..8169a33 Binary files /dev/null and b/src/images/creatures/Zombie (Stronghold of Security)#Level 12.png differ diff --git a/src/images/creatures/Zombie (Stronghold of Security)#Level 21.png b/src/images/creatures/Zombie (Stronghold of Security)#Level 21.png new file mode 100644 index 0000000..ac0c282 Binary files /dev/null and b/src/images/creatures/Zombie (Stronghold of Security)#Level 21.png differ diff --git a/src/images/creatures/Zombie (Temple Trekking)#Default.png b/src/images/creatures/Zombie (Temple Trekking)#Default.png new file mode 100644 index 0000000..da0839b Binary files /dev/null and b/src/images/creatures/Zombie (Temple Trekking)#Default.png differ diff --git a/src/images/creatures/Zombie (The Shadow Reef)#Normal mode.png b/src/images/creatures/Zombie (The Shadow Reef)#Normal mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/src/images/creatures/Zombie (The Shadow Reef)#Normal mode.png differ diff --git a/src/images/creatures/Zombie (The Shadow Reef)#Story mode.png b/src/images/creatures/Zombie (The Shadow Reef)#Story mode.png new file mode 100644 index 0000000..1e2aec3 Binary files /dev/null and b/src/images/creatures/Zombie (The Shadow Reef)#Story mode.png differ diff --git a/src/images/creatures/Zombie (Uncharted Isles)#Aggressive.png b/src/images/creatures/Zombie (Uncharted Isles)#Aggressive.png new file mode 100644 index 0000000..a324bd4 Binary files /dev/null and b/src/images/creatures/Zombie (Uncharted Isles)#Aggressive.png differ diff --git a/src/images/creatures/Zombie (Uncharted Isles)#Female.png b/src/images/creatures/Zombie (Uncharted Isles)#Female.png new file mode 100644 index 0000000..7712fc5 Binary files /dev/null and b/src/images/creatures/Zombie (Uncharted Isles)#Female.png differ diff --git a/src/images/creatures/Zombie (Uncharted Isles)#Male.png b/src/images/creatures/Zombie (Uncharted Isles)#Male.png new file mode 100644 index 0000000..a324bd4 Binary files /dev/null and b/src/images/creatures/Zombie (Uncharted Isles)#Male.png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 22 (1).png b/src/images/creatures/Zombie (Wilderness)#Level 22 (1).png new file mode 100644 index 0000000..3a677a2 Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 22 (1).png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 22 (2).png b/src/images/creatures/Zombie (Wilderness)#Level 22 (2).png new file mode 100644 index 0000000..ab4f2ae Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 22 (2).png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 22 (3).png b/src/images/creatures/Zombie (Wilderness)#Level 22 (3).png new file mode 100644 index 0000000..48d9847 Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 22 (3).png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 29 (1).png b/src/images/creatures/Zombie (Wilderness)#Level 29 (1).png new file mode 100644 index 0000000..b630977 Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 29 (1).png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 29 (2).png b/src/images/creatures/Zombie (Wilderness)#Level 29 (2).png new file mode 100644 index 0000000..1408a39 Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 29 (2).png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 29 (3).png b/src/images/creatures/Zombie (Wilderness)#Level 29 (3).png new file mode 100644 index 0000000..b417efa Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 29 (3).png differ diff --git a/src/images/creatures/Zombie (Wilderness)#Level 29 (4).png b/src/images/creatures/Zombie (Wilderness)#Level 29 (4).png new file mode 100644 index 0000000..6d3556f Binary files /dev/null and b/src/images/creatures/Zombie (Wilderness)#Level 29 (4).png differ diff --git a/src/images/creatures/Zombie (Zogre Flesh Eaters)#Default.png b/src/images/creatures/Zombie (Zogre Flesh Eaters)#Default.png new file mode 100644 index 0000000..8c8d2eb Binary files /dev/null and b/src/images/creatures/Zombie (Zogre Flesh Eaters)#Default.png differ diff --git a/src/images/creatures/Zombie cow (New Varrock)#Boss.png b/src/images/creatures/Zombie cow (New Varrock)#Boss.png new file mode 100644 index 0000000..16be64c Binary files /dev/null and b/src/images/creatures/Zombie cow (New Varrock)#Boss.png differ diff --git a/src/images/creatures/Zombie cow (New Varrock)#Regular.png b/src/images/creatures/Zombie cow (New Varrock)#Regular.png new file mode 100644 index 0000000..16be64c Binary files /dev/null and b/src/images/creatures/Zombie cow (New Varrock)#Regular.png differ diff --git a/src/images/creatures/Zombie hand#Default.png b/src/images/creatures/Zombie hand#Default.png new file mode 100644 index 0000000..d73e640 Binary files /dev/null and b/src/images/creatures/Zombie hand#Default.png differ diff --git a/src/images/creatures/Zombie knight#Ancient Awakening.png b/src/images/creatures/Zombie knight#Ancient Awakening.png new file mode 100644 index 0000000..16e760b Binary files /dev/null and b/src/images/creatures/Zombie knight#Ancient Awakening.png differ diff --git a/src/images/creatures/Zombie knight#Ungael combat activity (hard).png b/src/images/creatures/Zombie knight#Ungael combat activity (hard).png new file mode 100644 index 0000000..16e760b Binary files /dev/null and b/src/images/creatures/Zombie knight#Ungael combat activity (hard).png differ diff --git a/src/images/creatures/Zombie knight#Ungael combat activity (standard).png b/src/images/creatures/Zombie knight#Ungael combat activity (standard).png new file mode 100644 index 0000000..16e760b Binary files /dev/null and b/src/images/creatures/Zombie knight#Ungael combat activity (standard).png differ diff --git a/src/images/creatures/Zombie pirate#Level 49.png b/src/images/creatures/Zombie pirate#Level 49.png new file mode 100644 index 0000000..c418c5b Binary files /dev/null and b/src/images/creatures/Zombie pirate#Level 49.png differ diff --git a/src/images/creatures/Zombie pirate#Level 50.png b/src/images/creatures/Zombie pirate#Level 50.png new file mode 100644 index 0000000..6aa5b68 Binary files /dev/null and b/src/images/creatures/Zombie pirate#Level 50.png differ diff --git a/src/images/creatures/Zombie pirate#Pieces of Hate.png b/src/images/creatures/Zombie pirate#Pieces of Hate.png new file mode 100644 index 0000000..c418c5b Binary files /dev/null and b/src/images/creatures/Zombie pirate#Pieces of Hate.png differ diff --git a/src/images/creatures/Zombie swab#Default.png b/src/images/creatures/Zombie swab#Default.png new file mode 100644 index 0000000..c3902ed Binary files /dev/null and b/src/images/creatures/Zombie swab#Default.png differ diff --git a/src/images/creatures/Zombie warrior#1 (Ancient Awakening).png b/src/images/creatures/Zombie warrior#1 (Ancient Awakening).png new file mode 100644 index 0000000..1d81fb1 Binary files /dev/null and b/src/images/creatures/Zombie warrior#1 (Ancient Awakening).png differ diff --git a/src/images/creatures/Zombie warrior#1 (Ungael combat activity).png b/src/images/creatures/Zombie warrior#1 (Ungael combat activity).png new file mode 100644 index 0000000..1d81fb1 Binary files /dev/null and b/src/images/creatures/Zombie warrior#1 (Ungael combat activity).png differ diff --git a/src/images/creatures/Zombie warrior#2 (Ancient Awakening).png b/src/images/creatures/Zombie warrior#2 (Ancient Awakening).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/src/images/creatures/Zombie warrior#2 (Ancient Awakening).png differ diff --git a/src/images/creatures/Zombie warrior#2 (Ungael combat activity).png b/src/images/creatures/Zombie warrior#2 (Ungael combat activity).png new file mode 100644 index 0000000..bf3e1dc Binary files /dev/null and b/src/images/creatures/Zombie warrior#2 (Ungael combat activity).png differ diff --git a/src/images/creatures/Zombie#Level 12.png b/src/images/creatures/Zombie#Level 12.png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/src/images/creatures/Zombie#Level 12.png differ diff --git a/src/images/creatures/Zombie#Level 22 (Graveyard of Shadows).png b/src/images/creatures/Zombie#Level 22 (Graveyard of Shadows).png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/src/images/creatures/Zombie#Level 22 (Graveyard of Shadows).png differ diff --git a/src/images/creatures/Zombie#Level 22.png b/src/images/creatures/Zombie#Level 22.png new file mode 100644 index 0000000..8f662b8 Binary files /dev/null and b/src/images/creatures/Zombie#Level 22.png differ diff --git a/src/images/creatures/Zombie#Level 29 (Entrana).png b/src/images/creatures/Zombie#Level 29 (Entrana).png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/src/images/creatures/Zombie#Level 29 (Entrana).png differ diff --git a/src/images/creatures/Zombie#Level 29 (Graveyard of Shadows).png b/src/images/creatures/Zombie#Level 29 (Graveyard of Shadows).png new file mode 100644 index 0000000..e0406bc Binary files /dev/null and b/src/images/creatures/Zombie#Level 29 (Graveyard of Shadows).png differ diff --git a/src/images/creatures/Zombie#Level 29.png b/src/images/creatures/Zombie#Level 29.png new file mode 100644 index 0000000..b630977 Binary files /dev/null and b/src/images/creatures/Zombie#Level 29.png differ diff --git a/src/images/data/reaper_collapsed_OSL.data.png b/src/images/data/reaper_collapsed_OSL.data.png new file mode 100644 index 0000000..bbadbf2 Binary files /dev/null and b/src/images/data/reaper_collapsed_OSL.data.png differ diff --git a/src/images/data/reaper_collapsed_RS3.data.png b/src/images/data/reaper_collapsed_RS3.data.png new file mode 100644 index 0000000..080fe2f Binary files /dev/null and b/src/images/data/reaper_collapsed_RS3.data.png differ diff --git a/src/images/data/reaper_expanded_OSL.data.png b/src/images/data/reaper_expanded_OSL.data.png new file mode 100644 index 0000000..205cfbd Binary files /dev/null and b/src/images/data/reaper_expanded_OSL.data.png differ diff --git a/src/images/data/reaper_expanded_RS3.data.png b/src/images/data/reaper_expanded_RS3.data.png new file mode 100644 index 0000000..3f17ed6 Binary files /dev/null and b/src/images/data/reaper_expanded_RS3.data.png differ diff --git a/src/images/data/slayer_collapsed_OSL.data.png b/src/images/data/slayer_collapsed_OSL.data.png new file mode 100644 index 0000000..a4ce055 Binary files /dev/null and b/src/images/data/slayer_collapsed_OSL.data.png differ diff --git a/src/images/data/slayer_collapsed_RS3.data.png b/src/images/data/slayer_collapsed_RS3.data.png new file mode 100644 index 0000000..e2b0677 Binary files /dev/null and b/src/images/data/slayer_collapsed_RS3.data.png differ diff --git a/src/images/data/slayer_expanded_OSL.data.png b/src/images/data/slayer_expanded_OSL.data.png new file mode 100644 index 0000000..a6fc667 Binary files /dev/null and b/src/images/data/slayer_expanded_OSL.data.png differ diff --git a/src/images/data/slayer_expanded_RS3.data.png b/src/images/data/slayer_expanded_RS3.data.png new file mode 100644 index 0000000..3be8970 Binary files /dev/null and b/src/images/data/slayer_expanded_RS3.data.png differ diff --git a/src/images/icon.png b/src/images/icon.png new file mode 100644 index 0000000..f603f85 Binary files /dev/null and b/src/images/icon.png differ diff --git a/src/images/masters/Chaeldar.png b/src/images/masters/Chaeldar.png new file mode 100644 index 0000000..f2923a2 Binary files /dev/null and b/src/images/masters/Chaeldar.png differ diff --git a/src/images/masters/Duradel.png b/src/images/masters/Duradel.png new file mode 100644 index 0000000..8a015e3 Binary files /dev/null and b/src/images/masters/Duradel.png differ diff --git a/src/images/masters/Jacquelyn.png b/src/images/masters/Jacquelyn.png new file mode 100644 index 0000000..385405e Binary files /dev/null and b/src/images/masters/Jacquelyn.png differ diff --git a/src/images/masters/Kuradal.png b/src/images/masters/Kuradal.png new file mode 100644 index 0000000..efc6507 Binary files /dev/null and b/src/images/masters/Kuradal.png differ diff --git a/src/images/masters/Laniakea.png b/src/images/masters/Laniakea.png new file mode 100644 index 0000000..da9cd2f Binary files /dev/null and b/src/images/masters/Laniakea.png differ diff --git a/src/images/masters/Mandrith.png b/src/images/masters/Mandrith.png new file mode 100644 index 0000000..ab75bfb Binary files /dev/null and b/src/images/masters/Mandrith.png differ diff --git a/src/images/masters/Mazchna.png b/src/images/masters/Mazchna.png new file mode 100644 index 0000000..5385ad4 Binary files /dev/null and b/src/images/masters/Mazchna.png differ diff --git a/src/images/masters/Morvran.png b/src/images/masters/Morvran.png new file mode 100644 index 0000000..92bb8c2 Binary files /dev/null and b/src/images/masters/Morvran.png differ diff --git a/src/images/masters/Sumona.png b/src/images/masters/Sumona.png new file mode 100644 index 0000000..f126916 Binary files /dev/null and b/src/images/masters/Sumona.png differ diff --git a/src/images/masters/The Raptor.png b/src/images/masters/The Raptor.png new file mode 100644 index 0000000..d7984f9 Binary files /dev/null and b/src/images/masters/The Raptor.png differ diff --git a/src/images/masters/Turael.png b/src/images/masters/Turael.png new file mode 100644 index 0000000..3efbf40 Binary files /dev/null and b/src/images/masters/Turael.png differ diff --git a/src/images/masters/Vannaka.png b/src/images/masters/Vannaka.png new file mode 100644 index 0000000..b337aeb Binary files /dev/null and b/src/images/masters/Vannaka.png differ diff --git a/src/images/misc/combat.png b/src/images/misc/combat.png new file mode 100644 index 0000000..e1def8b Binary files /dev/null and b/src/images/misc/combat.png differ diff --git a/src/images/misc/defence.png b/src/images/misc/defence.png new file mode 100644 index 0000000..e91d7c8 Binary files /dev/null and b/src/images/misc/defence.png differ diff --git a/src/images/misc/lifepoints.png b/src/images/misc/lifepoints.png new file mode 100644 index 0000000..bf7de60 Binary files /dev/null and b/src/images/misc/lifepoints.png differ diff --git a/src/images/misc/magic.png b/src/images/misc/magic.png new file mode 100644 index 0000000..aa48a5a Binary files /dev/null and b/src/images/misc/magic.png differ diff --git a/src/images/misc/melee.png b/src/images/misc/melee.png new file mode 100644 index 0000000..4a2671c Binary files /dev/null and b/src/images/misc/melee.png differ diff --git a/src/images/misc/necromancy.png b/src/images/misc/necromancy.png new file mode 100644 index 0000000..d4e8d5f Binary files /dev/null and b/src/images/misc/necromancy.png differ diff --git a/src/images/misc/ranged.png b/src/images/misc/ranged.png new file mode 100644 index 0000000..9718ffe Binary files /dev/null and b/src/images/misc/ranged.png differ diff --git a/src/images/misc/slayer.png b/src/images/misc/slayer.png new file mode 100644 index 0000000..e8c1db9 Binary files /dev/null and b/src/images/misc/slayer.png differ diff --git a/src/images/misc/spec.png b/src/images/misc/spec.png new file mode 100644 index 0000000..7dae6ab Binary files /dev/null and b/src/images/misc/spec.png differ diff --git a/src/images/preview/SlayerAssistant.png b/src/images/preview/SlayerAssistant.png new file mode 100644 index 0000000..568fe3d Binary files /dev/null and b/src/images/preview/SlayerAssistant.png differ diff --git a/src/images/preview/SlayerAssistantNewLookNFeel.png b/src/images/preview/SlayerAssistantNewLookNFeel.png new file mode 100644 index 0000000..7c09432 Binary files /dev/null and b/src/images/preview/SlayerAssistantNewLookNFeel.png differ diff --git a/src/images/preview/SlayerAssistantUpdate20240611.png b/src/images/preview/SlayerAssistantUpdate20240611.png new file mode 100644 index 0000000..f4f50b2 Binary files /dev/null and b/src/images/preview/SlayerAssistantUpdate20240611.png differ diff --git a/src/images/preview/SlayerAssistantUpdate20240615.png b/src/images/preview/SlayerAssistantUpdate20240615.png new file mode 100644 index 0000000..07b0984 Binary files /dev/null and b/src/images/preview/SlayerAssistantUpdate20240615.png differ diff --git a/src/images/susceptible/Abyssal_head.png b/src/images/susceptible/Abyssal_head.png new file mode 100644 index 0000000..29d077f Binary files /dev/null and b/src/images/susceptible/Abyssal_head.png differ diff --git a/src/images/susceptible/Balmung.png b/src/images/susceptible/Balmung.png new file mode 100644 index 0000000..4b0544c Binary files /dev/null and b/src/images/susceptible/Balmung.png differ diff --git a/src/images/susceptible/Basilisk_head.png b/src/images/susceptible/Basilisk_head.png new file mode 100644 index 0000000..8470f40 Binary files /dev/null and b/src/images/susceptible/Basilisk_head.png differ diff --git a/src/images/susceptible/Blisterwood_staff.png b/src/images/susceptible/Blisterwood_staff.png new file mode 100644 index 0000000..1f44692 Binary files /dev/null and b/src/images/susceptible/Blisterwood_staff.png differ diff --git a/src/images/susceptible/Corrupt_Vesta's_longsword.png b/src/images/susceptible/Corrupt_Vesta's_longsword.png new file mode 100644 index 0000000..1fa62a5 Binary files /dev/null and b/src/images/susceptible/Corrupt_Vesta's_longsword.png differ diff --git a/src/images/susceptible/Demon_Slayer_(perk).png b/src/images/susceptible/Demon_Slayer_(perk).png new file mode 100644 index 0000000..f010ce4 Binary files /dev/null and b/src/images/susceptible/Demon_Slayer_(perk).png differ diff --git a/src/images/susceptible/Dragon_Slayer_(perk).png b/src/images/susceptible/Dragon_Slayer_(perk).png new file mode 100644 index 0000000..863f821 Binary files /dev/null and b/src/images/susceptible/Dragon_Slayer_(perk).png differ diff --git a/src/images/susceptible/Ghost_hunter_backpack.png b/src/images/susceptible/Ghost_hunter_backpack.png new file mode 100644 index 0000000..5dc8178 Binary files /dev/null and b/src/images/susceptible/Ghost_hunter_backpack.png differ diff --git a/src/images/susceptible/Hexhunter_bow.png b/src/images/susceptible/Hexhunter_bow.png new file mode 100644 index 0000000..bfe434a Binary files /dev/null and b/src/images/susceptible/Hexhunter_bow.png differ diff --git a/src/images/susceptible/Ice_Barrage_icon.png b/src/images/susceptible/Ice_Barrage_icon.png new file mode 100644 index 0000000..44b35ab Binary files /dev/null and b/src/images/susceptible/Ice_Barrage_icon.png differ diff --git a/src/images/susceptible/Inquisitor_staff.png b/src/images/susceptible/Inquisitor_staff.png new file mode 100644 index 0000000..667af4b Binary files /dev/null and b/src/images/susceptible/Inquisitor_staff.png differ diff --git a/src/images/susceptible/Keris.png b/src/images/susceptible/Keris.png new file mode 100644 index 0000000..4880e9b Binary files /dev/null and b/src/images/susceptible/Keris.png differ diff --git a/src/images/susceptible/Necklace_of_Salamancy.png b/src/images/susceptible/Necklace_of_Salamancy.png new file mode 100644 index 0000000..9c20c04 Binary files /dev/null and b/src/images/susceptible/Necklace_of_Salamancy.png differ diff --git a/src/images/susceptible/Steel_brutal_2.png b/src/images/susceptible/Steel_brutal_2.png new file mode 100644 index 0000000..566ab3d Binary files /dev/null and b/src/images/susceptible/Steel_brutal_2.png differ diff --git a/src/images/susceptible/Terrasaur_maul.png b/src/images/susceptible/Terrasaur_maul.png new file mode 100644 index 0000000..b79334d Binary files /dev/null and b/src/images/susceptible/Terrasaur_maul.png differ diff --git a/src/images/susceptible/Undead_Slayer.png b/src/images/susceptible/Undead_Slayer.png new file mode 100644 index 0000000..a35289f Binary files /dev/null and b/src/images/susceptible/Undead_Slayer.png differ diff --git a/src/images/ui/default/about/Reaper_counter.png b/src/images/ui/default/about/Reaper_counter.png new file mode 100644 index 0000000..7a57927 Binary files /dev/null and b/src/images/ui/default/about/Reaper_counter.png differ diff --git a/src/images/ui/default/about/Reaper_counter_expanded.png b/src/images/ui/default/about/Reaper_counter_expanded.png new file mode 100644 index 0000000..d498e4c Binary files /dev/null and b/src/images/ui/default/about/Reaper_counter_expanded.png differ diff --git a/src/images/ui/default/about/Reaper_task_interface.png b/src/images/ui/default/about/Reaper_task_interface.png new file mode 100644 index 0000000..54b28bf Binary files /dev/null and b/src/images/ui/default/about/Reaper_task_interface.png differ diff --git a/src/images/ui/default/about/Right_click_interface.png b/src/images/ui/default/about/Right_click_interface.png new file mode 100644 index 0000000..493ad62 Binary files /dev/null and b/src/images/ui/default/about/Right_click_interface.png differ diff --git a/src/images/ui/default/about/Select_your_own_task.png b/src/images/ui/default/about/Select_your_own_task.png new file mode 100644 index 0000000..d0c8542 Binary files /dev/null and b/src/images/ui/default/about/Select_your_own_task.png differ diff --git a/src/images/ui/default/about/Slayer_assistant_interface.png b/src/images/ui/default/about/Slayer_assistant_interface.png new file mode 100644 index 0000000..6269b5f Binary files /dev/null and b/src/images/ui/default/about/Slayer_assistant_interface.png differ diff --git a/src/images/ui/default/about/Slayer_assistant_interface.xcf b/src/images/ui/default/about/Slayer_assistant_interface.xcf new file mode 100644 index 0000000..341698a Binary files /dev/null and b/src/images/ui/default/about/Slayer_assistant_interface.xcf differ diff --git a/src/images/ui/default/about/Slayer_counter.png b/src/images/ui/default/about/Slayer_counter.png new file mode 100644 index 0000000..807332e Binary files /dev/null and b/src/images/ui/default/about/Slayer_counter.png differ diff --git a/src/images/ui/default/about/Slayer_counter_expanded.png b/src/images/ui/default/about/Slayer_counter_expanded.png new file mode 100644 index 0000000..b5353bc Binary files /dev/null and b/src/images/ui/default/about/Slayer_counter_expanded.png differ diff --git a/src/images/ui/default/about/Slayer_task_interface.png b/src/images/ui/default/about/Slayer_task_interface.png new file mode 100644 index 0000000..51123c9 Binary files /dev/null and b/src/images/ui/default/about/Slayer_task_interface.png differ diff --git a/src/images/ui/default/about/VIP_ticket_interface.png b/src/images/ui/default/about/VIP_ticket_interface.png new file mode 100644 index 0000000..89d3626 Binary files /dev/null and b/src/images/ui/default/about/VIP_ticket_interface.png differ diff --git a/src/images/ui/default/back.png b/src/images/ui/default/back.png new file mode 100644 index 0000000..9d23646 Binary files /dev/null and b/src/images/ui/default/back.png differ diff --git a/src/images/ui/default/background.png b/src/images/ui/default/background.png new file mode 100644 index 0000000..d6ef4bb Binary files /dev/null and b/src/images/ui/default/background.png differ diff --git a/src/images/ui/default/donate.png b/src/images/ui/default/donate.png new file mode 100644 index 0000000..46dde21 Binary files /dev/null and b/src/images/ui/default/donate.png differ diff --git a/src/images/ui/default/forward.png b/src/images/ui/default/forward.png new file mode 100644 index 0000000..b8907f9 Binary files /dev/null and b/src/images/ui/default/forward.png differ diff --git a/src/images/ui/default/infoicon.png b/src/images/ui/default/infoicon.png new file mode 100644 index 0000000..7177084 Binary files /dev/null and b/src/images/ui/default/infoicon.png differ diff --git a/src/images/ui/default/nisbutton.png b/src/images/ui/default/nisbutton.png new file mode 100644 index 0000000..496b8e7 Binary files /dev/null and b/src/images/ui/default/nisbutton.png differ diff --git a/src/images/ui/default/settingscog.png b/src/images/ui/default/settingscog.png new file mode 100644 index 0000000..96265cf Binary files /dev/null and b/src/images/ui/default/settingscog.png differ diff --git a/src/images/ui/default/wikipedia.png b/src/images/ui/default/wikipedia.png new file mode 100644 index 0000000..1f9a7a7 Binary files /dev/null and b/src/images/ui/default/wikipedia.png differ diff --git a/src/images/weakness/Air_weakness_icon.png b/src/images/weakness/Air_weakness_icon.png new file mode 100644 index 0000000..20244ce Binary files /dev/null and b/src/images/weakness/Air_weakness_icon.png differ diff --git a/src/images/weakness/Arrow_weakness_icon.png b/src/images/weakness/Arrow_weakness_icon.png new file mode 100644 index 0000000..7a996ab Binary files /dev/null and b/src/images/weakness/Arrow_weakness_icon.png differ diff --git a/src/images/weakness/Bolt_weakness_icon.png b/src/images/weakness/Bolt_weakness_icon.png new file mode 100644 index 0000000..5e9ef1b Binary files /dev/null and b/src/images/weakness/Bolt_weakness_icon.png differ diff --git a/src/images/weakness/Crush_weakness_icon.png b/src/images/weakness/Crush_weakness_icon.png new file mode 100644 index 0000000..4bf250e Binary files /dev/null and b/src/images/weakness/Crush_weakness_icon.png differ diff --git a/src/images/weakness/Earth_weakness_icon.png b/src/images/weakness/Earth_weakness_icon.png new file mode 100644 index 0000000..fd407bd Binary files /dev/null and b/src/images/weakness/Earth_weakness_icon.png differ diff --git a/src/images/weakness/Fire_weakness_icon.png b/src/images/weakness/Fire_weakness_icon.png new file mode 100644 index 0000000..bf25460 Binary files /dev/null and b/src/images/weakness/Fire_weakness_icon.png differ diff --git a/src/images/weakness/Magic_weakness_icon.png b/src/images/weakness/Magic_weakness_icon.png new file mode 100644 index 0000000..5bc4bf0 Binary files /dev/null and b/src/images/weakness/Magic_weakness_icon.png differ diff --git a/src/images/weakness/Melee_weakness_icon.png b/src/images/weakness/Melee_weakness_icon.png new file mode 100644 index 0000000..e7c6dfb Binary files /dev/null and b/src/images/weakness/Melee_weakness_icon.png differ diff --git a/src/images/weakness/Necromancy-icon.png b/src/images/weakness/Necromancy-icon.png new file mode 100644 index 0000000..6c7e50c Binary files /dev/null and b/src/images/weakness/Necromancy-icon.png differ diff --git a/src/images/weakness/Ranged_weakness_icon.png b/src/images/weakness/Ranged_weakness_icon.png new file mode 100644 index 0000000..3349fbc Binary files /dev/null and b/src/images/weakness/Ranged_weakness_icon.png differ diff --git a/src/images/weakness/Slash_weakness_icon.png b/src/images/weakness/Slash_weakness_icon.png new file mode 100644 index 0000000..b627f15 Binary files /dev/null and b/src/images/weakness/Slash_weakness_icon.png differ diff --git a/src/images/weakness/Stab_weakness_icon.png b/src/images/weakness/Stab_weakness_icon.png new file mode 100644 index 0000000..a65ba88 Binary files /dev/null and b/src/images/weakness/Stab_weakness_icon.png differ diff --git a/src/images/weakness/Thrown_weakness_icon.png b/src/images/weakness/Thrown_weakness_icon.png new file mode 100644 index 0000000..85d069e Binary files /dev/null and b/src/images/weakness/Thrown_weakness_icon.png differ diff --git a/src/images/weakness/Water_weakness_icon.png b/src/images/weakness/Water_weakness_icon.png new file mode 100644 index 0000000..840989c Binary files /dev/null and b/src/images/weakness/Water_weakness_icon.png differ diff --git a/src/images/weakness/Zero_weakness_icon.png b/src/images/weakness/Zero_weakness_icon.png new file mode 100644 index 0000000..384a6dc Binary files /dev/null and b/src/images/weakness/Zero_weakness_icon.png differ diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..92a2173 --- /dev/null +++ b/src/index.html @@ -0,0 +1,13 @@ + + + + + Slayer Assistant + + + + + + + + \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..6a92f44 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,97 @@ +import * as dochandler from "./modules/dochandler"; +import * as settings from "./modules/settings"; +import * as slayer from "./modules/slayer"; +import * as logger from "./modules/logger"; + +import "./index.html"; +import "./appconfig.json"; + +/* COPYRIGHT NOTICE - DO NOT REMOVE + 2021 @ Unlishema Dragonsworn + I have programmed this enitre app myself; however, I must give credit where credit is due. + + The credits have been moved into their own file @ https://slayer.unlishema.org/pages/credits.html +*/ +/* + ~~~ Slayer Assistant App ~~~ + Features coming in the near future (Also my current TODO List) + + ~ Before Release for Sure ~ + Update the about page. (Will need updated again on next release) + Update the changelog page. (Will need updated again on next release) + Update the credits page. (Will need updated again on next release) + + ~ Coming Next Release ~ + Adjust where the CNAME for the app on github is located for source update (Done) + Upload the source of the app to github so we won't lose it again (Ready but source needs Tested First) + Adjust the DNS Record for https://slayer.unlishema.org to point at https://unlishema.github.io/slayerassistant/dist instead for new update because the source is the main dir + Add ability to load the database through a php file instead of the json (Done, except for reapers.json) + - We will still use a json database in the app but the php file will build the json via MySQL (Done) + - The php file will be creatures.json via the .htaccess file (Done) + - http://slayer.unlishema.org/data/creatures.json will load http://slayer.unlishema.org/data/creatures.php?q=all (Done) + - Add other features to the database query php even if the app don't use them yet (Coming in the future) + -- Example: http://slayer.unlishema.org/data/creatures.php?q=Dragon&l=10 + -- l=100 could limit results, d could have it give extra details, q could also be setup for seaching, and so on + Adjust the caching of the json database files to make sure they get updated timely (use .htaccess and mode_expires.c) + - This may not be needed once I change over to the php file instead. (Doesn't seem to be needed anymore, more testing required) + + ~ Coming Very Soon Maybe even next Release ~ + Add in a status tracking area to keep track of xp/hr, kills/hr, and more (Needs finished) + Add settings into the app finally (Needs rest added) + Adjust histories to use sessionStorage + Make it show if it detects your using alt1toolkit or not and warn a users of the features they are missing without using alt1toolkit. + - Also add into settings ability to hide this warning. Also add setting to turn off injection of the alt1 app. + + ~ Near future Release ~ + Add support for Ushubti + + ~ Settings for the app ~ + Settings: + - Ability to toggle on and off Debug and Verbose mode + - Ability to toggle auto find task via dialog (Done) + - Ability to toggle auto find current task via Slayer Count RS3UI (Done) + - Ability to toggle extra info to make box smaller without scrollbar (Done) + - Ability to toggle all hidden creatures + -- Ability to toggle sub-classes of hidden creatures like (elite), (dragonkin lab) and such + - Ability to select default loading + -- Default Task(s) on open and adjust doc based on it (Done, Partially) + -- Load previous task(s) and adjust doc based on it + - Ability to select defaults for everything (Later On) + -- Select default creature per task + -- Select default variant per creature + - Ability to customize the Look N Feel of the Slayer Assistant UI (Way Later On) + - Ability to select how long to save search history (Way Later On) + - Ability to select the type of search algo for the app (Maybe Later On) + - Ability to toggle warnings (eg. Missing Features due to not on Alt1Toolkit, Missing Data, and so on...) + - Ability to turn off app injection (This will fix issues where a user can't inject into the client) + +*/ + +if (window.alt1) alt1.identifyAppUrl("./appconfig.json"); + +// Initialize the JavaScript for the app +document.addEventListener("DOMContentLoaded", async () => { + try { + // Setup the main document and load assignment index + await dochandler.main.setup.documentMain(); + + // Run the Config Setup Process + await settings.controller.load(); + + // Start the capture loop at the configured interval + setInterval(() => { + slayer.findTask(); + }, settings.controller.data.autoCapture.loopTimer); + } catch (error) { + console.error("Initialization error:", error); + } +}); + +// Save settings before closing the app +document.addEventListener("beforeunload", async () => { + try { + await settings.controller.save(); + } catch (error) { + logger.error("Error saving settings:", error); + } +}); \ No newline at end of file diff --git a/src/modules/SearchAlgorithm.ts b/src/modules/SearchAlgorithm.ts new file mode 100644 index 0000000..13637d0 --- /dev/null +++ b/src/modules/SearchAlgorithm.ts @@ -0,0 +1,141 @@ +export class SearchData { + reaper: boolean; + task: string; + probability: number; + + constructor() { + this.reaper = false; + this.task = 'Dragons'; + this.probability = 0; + } +} + +export class SearchAlgorithm { + private data: SearchData; + + constructor() { + this.data = new SearchData(); + } + + // Lookup best possible assignment based on input string + public async lookup(lookup: string, skipReaper: boolean = false): Promise { + const probabilities: { [key: string]: any } = {}; + + if (!skipReaper) { + const reapersResponse = await fetch("./data/reapers.json"); + const reapers = await reapersResponse.json(); + + for (const a of reapers) { + probabilities[a["index"]] = { + reaper: true, + index: Math.round(this.similarity(a["index"], lookup) * 10000) / 100, + creatures: {} + }; + + for (const b of a["creatures"]) { + probabilities[a["index"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175; + } + } + } + + const assignmentsResponse = await fetch("./data/assignments.json"); + const assignments = await assignmentsResponse.json(); + + for (const a of assignments) { + probabilities[a["index"]] = { + reaper: false, + index: Math.round(this.similarity(a["index"], lookup) * 10000) / 125, + alias: {}, + creatures: {} + }; + + for (const b of a["alias"]) { + probabilities[a["index"]].alias[b] = Math.round(this.similarity(b, lookup) * 10000) / 150; + } + + for (const b of a["creatures"]) { + probabilities[a["index"]].creatures[b] = Math.round(this.similarity(b, lookup) * 10000) / 175; + } + } + + // Find highest likelihood of the search + for (const key in probabilities) { + if (probabilities[key].index > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].index; + } + + if (probabilities[key].alias) { + const aliasKeys = Object.keys(probabilities[key].alias); + for (const aliasKey of aliasKeys) { + if (probabilities[key].alias[aliasKey] > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].alias[aliasKey]; + } + } + } + + if (probabilities[key].creatures) { + const creatureKeys = Object.keys(probabilities[key].creatures); + for (const creatureKey of creatureKeys) { + if (probabilities[key].creatures[creatureKey] > this.data.probability) { + this.data.task = key; + this.data.reaper = probabilities[key].reaper; + this.data.probability = probabilities[key].creatures[creatureKey]; + } + } + } + } + + return this.data; + } + + // Check the similarity of 2 strings + private similarity(s1: string, s2: string): number { + let longer = s1; + let shorter = s2; + + if (s1.length < s2.length) { + longer = s2; + shorter = s1; + } + + const longerLength = longer.length; + + if (longerLength === 0) return 1.0; + + return (longerLength - this.editDistance(longer, shorter)) / parseFloat('' + longerLength); + } + + // Calculate the edit distance between 2 strings + private editDistance(s1: string, s2: string): number { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + const costs: number[] = []; + + for (let i = 0; i <= s1.length; i++) { + let lastValue = i; + + for (let j = 0; j <= s2.length; j++) { + if (i === 0) { + costs[j] = j; + } else if (j > 0) { + let newValue = costs[j - 1]; + if (s1.charAt(i - 1) !== s2.charAt(j - 1)) { + newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; + } + costs[j - 1] = lastValue; + lastValue = newValue; + } + } + + if (i > 0) { + costs[s2.length] = lastValue; + } + } + + return costs[s2.length]; + } +} diff --git a/src/modules/SlayerDialogReader.ts b/src/modules/SlayerDialogReader.ts new file mode 100644 index 0000000..67a45e9 --- /dev/null +++ b/src/modules/SlayerDialogReader.ts @@ -0,0 +1,86 @@ +import * as a1lib from "alt1"; +import DialogReader from 'alt1/dialog'; + +class SlayerData { + selectYourOwn: boolean; + ticket: boolean; + reaper: boolean; + count: number[]; + task: string[]; + + constructor() { + this.selectYourOwn = false; + this.ticket = false; + this.reaper = false; + this.count = []; + this.task = []; + } +} + +export class SlayerDialogReader { + public dialogReader: any; + public data: SlayerData; + + constructor() {} + + public async read(buffer: any = null): Promise { + if (!buffer) { + buffer = a1lib.captureHoldFullRs(); + } + if (!this.dialogReader) { + this.dialogReader = new DialogReader(); + } + this.data = new SlayerData(); + + const data = this.dialogReader.find(buffer); + if (!data) return null; + + const box = this.dialogReader.read(buffer); + if (!box) return null; + + if (box.text && (!box.opts || box.opts.length !== 2)) { + const msg = box.text.toString(); + + // Parsing logic for various types of dialogs + if (msg.toLowerCase().includes("select your own task")) { + this.data.selectYourOwn = true; + } + + if (msg.toLowerCase().includes("require you to collect")) { + this.data.reaper = true; + const countText = msg.substring(msg.indexOf("collect ") + 8, msg.indexOf(" souls")); + this.data.count[0] = parseInt(countText); + this.data.task[0] = msg.substring(msg.indexOf("battle: ") + 8, msg.indexOf(". Can")); + } + + if (msg.toLowerCase().includes("new task is to kill")) { + const e = msg.substring(msg.indexOf("kill ") + 5, msg.length - 1); + const countText = e.substring(0, e.includes(",") ? e.indexOf(",") : e.indexOf(" ")); + this.data.count[0] = parseInt(countText); + this.data.task[0] = e.substring((e.includes(",") ? e.indexOf(",") : e.indexOf(" ")) + 1); + } + + if (msg.toLowerCase().includes("still need to kill")) { + const e = msg.substring(msg.indexOf("kill ") + 5); + this.data.count[0] = parseInt(e.substring(0, e.indexOf(" "))); + this.data.task[0] = e.substring(e.indexOf(" ") + 1, e.includes(".") ? e.indexOf(".") : e.length - 1); + } + + if (msg.toLowerCase().includes("still hunting")) { + this.data.task[0] = msg.substring(msg.indexOf("hunting ") + 8, msg.indexOf(";")); + } + } + + if (box.opts && box.opts.length === 2 && (box.title && box.title.toLowerCase().includes("change your assigned slayer task"))) { + this.data.ticket = true; + for (let i = 0; i < box.opts.length; i++) { + const msg = box.opts[i].text; + const countText = msg.substring(0, msg.indexOf(' ')); + this.data.count[i] = parseInt(countText); + this.data.task[i] = msg.substring(msg.indexOf(' ') + 1, msg.includes('(') ? msg.indexOf('(') - 1 : msg.length); + } + } + + return this.data; + } +} diff --git a/src/modules/UICounterReader.ts b/src/modules/UICounterReader.ts new file mode 100644 index 0000000..c807d52 --- /dev/null +++ b/src/modules/UICounterReader.ts @@ -0,0 +1,78 @@ +import * as a1lib from "alt1"; +import * as OCR from "alt1/ocr"; +import { ImageData } from "alt1/base"; + +import * as settings from "./settings"; + +let imgs = a1lib.webpackImages({ + slayer_expanded_RS3: require("../images/data/slayer_expanded_RS3.data.png"), + slayer_expanded_OSL: require("../images/data/slayer_expanded_OSL.data.png"), + reaper_expanded_RS3: require("../images/data/reaper_expanded_RS3.data.png"), + reaper_expanded_OSL: require("../images/data/reaper_expanded_OSL.data.png"), + slayer_collapsed_RS3: require("../images/data/slayer_collapsed_RS3.data.png"), + slayer_collapsed_OSL: require("../images/data/slayer_collapsed_OSL.data.png"), + reaper_collapsed_RS3: require("../images/data/reaper_collapsed_RS3.data.png"), + reaper_collapsed_OSL: require("../images/data/reaper_collapsed_OSL.data.png"), +}); + +export class UICounterData { + img: ImageData; + collapsed: boolean; + OS: boolean; + reaper: boolean; + count: number; + task: string; +} + +export class UICounterReader { + countFont: OCR.FontDefinition | null = null; + taskFont: OCR.FontDefinition | null = null; + pos: { x: number; y: number; }[]; + data: UICounterData | null = null; + + async read(buffer?: a1lib.ImgRef) { + if (!buffer) buffer = a1lib.captureHoldFullRs(); + if (!this.countFont) this.countFont = await fetch(require("../fonts/aa_10px_mono.fontmeta.json")).then(r => r.json()); + if (!this.taskFont) this.taskFont = await fetch(require("../fonts/aa_8px_mono.fontmeta.json")).then(r => r.json()); + // Reset data for next search + this.pos = []; + this.data = null; + + // Look for all UI Elements until we find one, then the rest will get skipped + this.findUIElement(buffer, imgs.slayer_collapsed_OSL, { reaper: false, collapsed: true, OS: true }); + this.findUIElement(buffer, imgs.slayer_expanded_OSL, { reaper: false, collapsed: false, OS: true }); + this.findUIElement(buffer, imgs.slayer_collapsed_RS3, { reaper: false, collapsed: true, OS: false }); + this.findUIElement(buffer, imgs.slayer_expanded_RS3, { reaper: false, collapsed: false, OS: false }); + this.findUIElement(buffer, imgs.reaper_collapsed_OSL, { reaper: true, collapsed: true, OS: true }); + this.findUIElement(buffer, imgs.reaper_expanded_OSL, { reaper: true, collapsed: false, OS: true }); + this.findUIElement(buffer, imgs.reaper_collapsed_RS3, { reaper: true, collapsed: true, OS: false }); + this.findUIElement(buffer, imgs.reaper_expanded_RS3, { reaper: true, collapsed: false, OS: false }); + + // If we don't find any data or we found too many matches then return + if (!this.data && this.pos.length == 0) return null; + + // Setup some temp data for extract the image + let width = this.data.collapsed ? imgs.slayer_collapsed_OSL.width : imgs.slayer_expanded_OSL.width; + let height = this.data.collapsed ? imgs.slayer_collapsed_OSL.height : imgs.slayer_expanded_OSL.height; + + // Loop the results and return the data we find + for (let match of this.pos) { + // Overlay a rectangle around the matched area on screen if we're running in alt1 + if (window.alt1 && alt1.permissionOverlay && settings.controller.data.ui.counter) alt1.overLayRect(a1lib.mixColor(255, 255, 255), match.x, match.y, width, height, 500, 3); + + // Get the pixel data for the matched area + this.data.img = buffer.toData(match.x, match.y, width, height); + + // Extract the count and task (if avaliable) + let countText = OCR.findReadLine(this.data.img, this.countFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], this.data.collapsed ? 10 : 72, 15, 30, 3); + this.data.count = parseInt(countText.text); + if (!this.data.collapsed) this.data.task = OCR.findReadLine(this.data.img, this.taskFont, this.data.OS ? [[255, 152, 31]] : [[255, 203, 5]], 9, 28, 156, 3).text; + } + return (!this.pos || this.pos.length == 0) ? null : this.data; + } + + private findUIElement(buffer: a1lib.ImgRef, img: ImageData, mode: { reaper: boolean, collapsed: boolean, OS: boolean }) { + if (!this.data && this.pos.length == 0) this.pos = buffer.findSubimage(img); + if (!this.data && this.pos.length > 0) this.data = { reaper: mode.reaper, collapsed: mode.collapsed, OS: mode.OS, img: null, count: -1, task: null } + } +} \ No newline at end of file diff --git a/src/modules/data/assignnments.ts b/src/modules/data/assignnments.ts new file mode 100644 index 0000000..29b4f8c --- /dev/null +++ b/src/modules/data/assignnments.ts @@ -0,0 +1,39 @@ +// Fetch a single assignment based on the index or alias +export async function get(assignment) { + try { + const response = await fetch("./data/assignments.json"); + const data = await response.json(); + + for (const a of data) { + if (a["index"].toLowerCase() === assignment.toLowerCase()) { + return a; + } + for (const b of a["alias"]) { + if (b.toLowerCase() === assignment.toLowerCase()) { + return a; + } + } + } + return null; + } catch (error) { + console.error("Error fetching data:", error); + return null; + } +} + +// Get an array of the index +export async function getIndexList() { + try { + let dataList = ""; + const response = await fetch("./data/assignments.json"); + const data = await response.json(); + + for (const a of data) { + dataList += `\n\r`; + } + return dataList; + } catch (error) { + console.error("Error fetching data:", error); + return ""; + } +} diff --git a/src/modules/data/creatures.ts b/src/modules/data/creatures.ts new file mode 100644 index 0000000..aaeae01 --- /dev/null +++ b/src/modules/data/creatures.ts @@ -0,0 +1,20 @@ +// Assuming decodeHtml function is defined or imported elsewhere +import { decodeHtml } from '../extrafuncs'; + +// Fetch a single creature based on the name +export async function get(creature) { + try { + const response = await fetch("./data/creatures.json"); + const data = await response.json(); + + for (const a of data) { + if (decodeHtml(a["name"].toLowerCase()) === creature.toLowerCase()) { + return a; + } + } + return null; + } catch (error) { + console.error("Error fetching data:", error); + return null; + } +} diff --git a/src/modules/data/masters.ts b/src/modules/data/masters.ts new file mode 100644 index 0000000..5da9aba --- /dev/null +++ b/src/modules/data/masters.ts @@ -0,0 +1,20 @@ +// Assuming decodeHtml function is defined or imported elsewhere +import { decodeHtml } from '../extrafuncs'; + +// Fetch a single master based on the name +export async function get(master) { + try { + const response = await fetch("./data/masters.json"); + const data = await response.json(); + + for (const a of data) { + if (decodeHtml(a["name"].toLowerCase()) === master.toLowerCase()) { + return a; + } + } + return null; + } catch (error) { + console.error("Error fetching data:", error); + return null; + } +} diff --git a/src/modules/data/reapers.ts b/src/modules/data/reapers.ts new file mode 100644 index 0000000..0110cd3 --- /dev/null +++ b/src/modules/data/reapers.ts @@ -0,0 +1,34 @@ +// Fetch a single reaper based on the index or alias +export async function get(reaper) { + try { + const response = await fetch("./data/reapers.json"); + const data = await response.json(); + + for (const a of data) { + if (a["index"].toLowerCase() === reaper.toLowerCase()) { + return a; + } + } + return null; + } catch (error) { + console.error("Error fetching data:", error); + return null; + } +} + +// Get an array of the index as HTML option elements +export async function getIndexList() { + try { + let dataList = ""; + const response = await fetch("./data/reapers.json"); + const data = await response.json(); + + for (const a of data) { + dataList += `\n\r`; + } + return dataList; + } catch (error) { + console.error("Error fetching data:", error); + return ""; + } +} diff --git a/src/modules/data/variants.ts b/src/modules/data/variants.ts new file mode 100644 index 0000000..1dce496 --- /dev/null +++ b/src/modules/data/variants.ts @@ -0,0 +1,24 @@ +// Import the decodeHtml function +import { decodeHtml } from '../extrafuncs'; + +// Fetch a single variant based on the creature name and variant name +export async function get(creature, variant) { + try { + const response = await fetch("./data/creatures.json"); + const data = await response.json(); + + for (const a of data) { + if (decodeHtml(a["name"].toLowerCase()) === creature.toLowerCase()) { + for (const b of a["variants"]) { + if (b["name"].toLowerCase() === variant.toLowerCase()) { + return b; + } + } + } + } + return null; + } catch (error) { + console.error("Error fetching data:", error); + return null; + } +} diff --git a/src/modules/dochandler.ts b/src/modules/dochandler.ts new file mode 100644 index 0000000..12d47a0 --- /dev/null +++ b/src/modules/dochandler.ts @@ -0,0 +1,22 @@ + +// Import required modules +import * as main from './dochandler/main'; + +// Export required modules +export * as animate from './dochandler/animate'; +export * as change from './dochandler/change'; +export * as hide from './dochandler/hide'; +export * as hover from './dochandler/hover'; +export * as main from './dochandler/main'; +export * as show from './dochandler/show'; +export * as open from './dochandler/open'; + +// Function to get the side element based on the index +export function getSide(i: number) { + var base = main.get.elid("base"); + var side = main.get.elc(i === 0 ? "left" : "right", base); + if (!side) { + side = main.get.elc("single", base); + } + return side; +} diff --git a/src/modules/dochandler/animate.ts b/src/modules/dochandler/animate.ts new file mode 100644 index 0000000..700ada9 --- /dev/null +++ b/src/modules/dochandler/animate.ts @@ -0,0 +1,18 @@ +// Import required modules +import * as dochandler from '../dochandler'; + +// Function to show the loading bar +export function loading() { + var loadingBar = dochandler.main.get.elid("loading-bar"); + if (loadingBar) { + loadingBar.style.visibility = "visible"; + } +} + +// Function to hide the loading bar +export function loadingStop() { + var loadingBar = dochandler.main.get.elid("loading-bar"); + if (loadingBar) { + loadingBar.style.visibility = "hidden"; + } +} \ No newline at end of file diff --git a/src/modules/dochandler/change.ts b/src/modules/dochandler/change.ts new file mode 100644 index 0000000..d59bf0b --- /dev/null +++ b/src/modules/dochandler/change.ts @@ -0,0 +1,258 @@ +// Import all modules as namespaces +import * as settings from '../settings'; +import * as dochandler from '../dochandler'; +import * as extrafuncs from '../extrafuncs'; +import * as masters from '../data/masters'; +import * as reapers from '../data/reapers'; +import * as assignments from '../data/assignnments'; +import * as creatures from '../data/creatures'; +import * as variants from '../data/variants'; +import * as logger from "../logger"; + +// Update the Creature variant shown +export async function variant(i, creature = null, variant = null) { + // Start loading animation + dochandler.animate.loading(); + + // Determine the side (view/panel) + const side = dochandler.getSide(i); + + // Return early if UI is limited or data is not available + if ((settings.controller.data.ui.limited || dochandler.main.limitedLoaded) && (!creature || !variant)) { + dochandler.animate.loadingStop(); + return; + } + + // Fetch creature and variant from UI elements if not provided + if (!creature) { + creature = (dochandler.main.get.elc("creatures", side)).value; + } + if (!variant) { + variant = (dochandler.main.get.elc("variants", side)).value; + } + + logger.log(`Change variant to: ${creature}#${variant}`); + + // Fetch data for the selected variant + const data = await variants.get(creature, variant); + + if (data) { + // Update UI if not limited + if (!settings.controller.data.ui.limited && !dochandler.main.limitedLoaded) { + // Update image + const imageContainer = dochandler.main.get.elc("image-container", side); + imageContainer.innerHTML = data["image"].replace("#", "%23"); + const imageElement = imageContainer.firstElementChild; + const newSize = extrafuncs.calculateAspectRatioFit( + parseInt(imageElement.getAttribute("width")), + parseInt(imageElement.getAttribute("height")), + imageContainer.offsetWidth, + imageContainer.offsetHeight + ); + imageElement.style.maxWidth = `${newSize.width}px`; + imageElement.style.maxHeight = `${newSize.height}px`; + + // Update stats + updateStats(side, data); + } + + // Update total slayer experience + const kills = parseInt(dochandler.main.get.elc("kills", side).innerHTML, 10); + dochandler.main.get.elc("total-slayer-exp", side).innerHTML = extrafuncs.numberWithCommas((data["slayer-exp"] * kills).toFixed(2)); + } + + // Stop loading animation + dochandler.animate.loadingStop(); +} + +// Helper function to update stats +function updateStats(side, data) { + dochandler.main.get.elc("level", side).innerHTML = data["level"]; + dochandler.main.get.elc("slayer-level", side).innerHTML = data["slayer-level"]; + dochandler.main.get.elc("lifepoints", side).innerHTML = data["lifepoints"]; + dochandler.main.get.elc("defence", side).innerHTML = data["defence"]; + dochandler.main.get.elc("max-melee", side).innerHTML = data["max-melee"]; + dochandler.main.get.elc("max-ranged", side).innerHTML = data["max-ranged"]; + dochandler.main.get.elc("max-magic", side).innerHTML = data["max-magic"]; + dochandler.main.get.elc("max-necromancy", side).innerHTML = data["max-necromancy"]; + dochandler.main.get.elc("max-spec", side).innerHTML = data["max-spec"]; + + // Update weakness and susceptibility + const weaknessElem = dochandler.main.get.elc("weaknessBox", side); + weaknessElem.innerHTML = "

Weakness

" + data["weakness"].join(""); + + const susceptibleElem = dochandler.main.get.elc("susceptibleBox", side); + susceptibleElem.innerHTML = "

Susceptible

" + data["susceptible"].join(""); + + // Update experience values + dochandler.main.get.elc("combat-exp", side).innerHTML = extrafuncs.numberWithCommas(data["experience"].toFixed(2)); + dochandler.main.get.elc("lifepoints-exp", side).innerHTML = extrafuncs.numberWithCommas(data["lifepoint-exp"].toFixed(2)); + dochandler.main.get.elc("slayer-exp", side).innerHTML = extrafuncs.numberWithCommas(data["slayer-exp"].toFixed(2)); +} + +// Update the Creature shown +export async function creature(i, creature = null, variant = null) { + // Start loading animation + dochandler.animate.loading(); + + // Determine the side (view/panel) + const side = dochandler.getSide(i); + + // Return early if UI is limited and no creature is provided + if ((settings.controller.data.ui.limited || dochandler.main.limitedLoaded) && !creature) { + dochandler.animate.loadingStop(); + return; + } + + // Fetch creature from UI elements if not provided + if (!creature) { + creature = (dochandler.main.get.elc("creatures", side)).value; + } + + logger.log(`Change Creature to: ${creature}${variant ? `#${variant}` : ''}`); + + // Fetch data for the selected creature + const data = await creatures.get(creature); + + if (data) { + // Update variants if available + if (data["variants"] && !settings.controller.data.ui.limited && !dochandler.main.limitedLoaded) { + const variantsElem = dochandler.main.get.elc("variants", side); + variantsElem.innerHTML = ""; + data["variants"].forEach(a => { + variantsElem.innerHTML += ``; + }); + if (!variant) { + variant = data["variants"][0]["name"]; + } + } + + // Update the variant to reflect changes + dochandler.change.variant(i, creature, variant); + } + + // Stop loading animation + dochandler.animate.loadingStop(); +} + +// Update the reaper assignment data +export async function reaper(task, count) { + return await assignment(2, task, count); +} + +// Update the entire Assignment data +export async function assignment(i, task, count) { + // Ensure correct task loading conditions + if (i === 1 && !dochandler.main.doubleLoaded) { + console.error("Cannot load double slayer task if only 1 is displayed!"); + return; + } + if (i === 2 && !dochandler.main.reaperLoaded) { + console.error("Cannot load reaper task if 2 are displayed!"); + return; + } + + // Show loading animation + dochandler.animate.loading(); + const side = dochandler.getSide(i); + const nameElement = dochandler.main.get.elc("name", side); + + if (!nameElement) return; + + // Check if the current task is the same as the new one + if ((task == null && nameElement.innerHTML !== "???") || nameElement.innerHTML.toLowerCase() === task.toLowerCase()) { + logger.log(`Update task: [${count}] ${task} ${i === 0 ? "(Default)" : (i === 2 ? "(Reaper)" : "(1 Slayer Token)")}`); + dochandler.main.get.elc("kills", side).innerHTML = extrafuncs.numberWithCommas(count); + let slayer_exp = dochandler.main.get.elc("slayer-exp", side); + if (slayer_exp && slayer_exp.innerHTML !== "") { + let slayxp = parseInt(slayer_exp.innerHTML); + dochandler.main.get.elc("total-slayer-exp", side).innerHTML = extrafuncs.numberWithCommas((slayxp * count).toFixed(2)); + } + dochandler.animate.loadingStop(); + return; + } + + // Load new task data + logger.log(`Load task: [${count}] ${task} ${i === 0 ? "(Default)" : (i === 2 ? "(Reaper)" : "(1 Slayer Token)")}`); + dochandler.main.get.elc("type", side).innerHTML = i === 0 ? "(Default)" : (i === 2 ? "(Reaper)" : "(1 Slayer Token)"); + if (i === 2) dochandler.main.get.elc("type", side).id = "type-reaper"; + + let data = await (i === 2 ? reapers.get(task) : assignments.get(task)); + if (!data) { + dochandler.animate.loadingStop(); + return; + } + + // Update UI elements with the new data + dochandler.main.get.elc("name", side).innerHTML = data["index"]; + dochandler.main.get.elc("name", side).title = data["index"]; + dochandler.main.get.elc("kills", side).innerHTML = extrafuncs.numberWithCommas(count); + if (dochandler.main.limitedLoaded) { + let total_exp = 0; // FIXME Add in ability to show the default creature exp + dochandler.main.get.elc("total-slayer-exp", side).innerHTML = extrafuncs.numberWithCommas(total_exp); + } + + // Update masters data + if (!settings.controller.data.ui.limited && !dochandler.main.limitedLoaded) { + dochandler.main.get.elc("masters", side).innerHTML = "
Assignment Range
"; + for (let j = 0; j < data["masters"].length; j++) { + const img = `${data[`; + const masterData = await masters.get(data["masters"][j]); + const kills = masterData["task-counts"][data["index"]]; + dochandler.main.get.elc("masters", side).innerHTML += `
${img} Kills: ${kills}
`; + } + for (let j = 0; j < data["masters"].length; j++) { + dochandler.main.get.elc(`masterInfo${j}`, side).addEventListener('click', () => dochandler.open.wiki.master(i, j)); + } + + // Update equipment data + if (data["equipment"]) { + for (let j = 0; j < 3; j++) { + dochandler.main.get.elc(`equipInfo${j + 1}`, side).innerHTML = j === 0 ? "None" : ""; + } + for (let j = 0; j < data["equipment"].length; j++) { + dochandler.main.get.elc(`equipInfo${j + 1}`, side).innerHTML = data["equipment"][j] || "Database Empty"; + } + dochandler.main.get.elc("equipMore", side).style.visibility = data["equipment"].length < 3 ? "hidden" : "visible"; + } else { + dochandler.main.get.elc("equipMore", side).style.visibility = "hidden"; + dochandler.main.get.elc("equipInfo1", side).innerHTML = "Database Missing"; + } + + // Update locations data + if (data["locations"]) { + for (let j = 0; j < 3; j++) { + dochandler.main.get.elc(`locationInfo${j + 1}`, side).innerHTML = j === 0 ? "None" : ""; + } + for (let j = 0; j < data["locations"].length; j++) { + dochandler.main.get.elc(`locationInfo${j + 1}`, side).innerHTML = data["locations"][j] || "Database Empty"; + } + dochandler.main.get.elc("locationMore", side).style.visibility = data["locations"].length < 3 ? "hidden" : "visible"; + } else { + dochandler.main.get.elc("locationMore", side).style.visibility = "hidden"; + dochandler.main.get.elc("locationInfo1", side).innerHTML = "Database Missing"; + } + + // Update creatures data + if (data["creatures"]) { + dochandler.main.get.elc("creatures", side).innerHTML = ""; + for (let a of data["creatures"]) { + if (!extrafuncs.listContains(data["hidden-creatures"], a)) { + const defaultCreature = data["default-creature"]?.split("#")[0] || ""; + dochandler.main.get.elc("creatures", side).innerHTML += ``; + } + } + } + + // Set default creature and variant + if (data["default-creature"]) { + const [creature, variant] = data["default-creature"].split("#"); + dochandler.change.creature(i, creature, variant); + } else { + dochandler.change.creature(i); + } + } + + // Stop loading animation + dochandler.animate.loadingStop(); +} diff --git a/src/modules/dochandler/hide.ts b/src/modules/dochandler/hide.ts new file mode 100644 index 0000000..b288783 --- /dev/null +++ b/src/modules/dochandler/hide.ts @@ -0,0 +1,26 @@ +import * as dochandler from "../dochandler"; +import * as settings from "../settings"; + +export function assignmentWikiPreview(i: number): void { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + dochandler.main.get.elc("preview-task-wiki", side).style.visibility = "hidden"; +} + +export function creatureWikiPreview(i: number): void { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + dochandler.main.get.elc("preview-creature-wiki", side).style.visibility = "hidden"; +} + +export function moreEquip(i: number): void { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + dochandler.main.get.elc("equipHidden", side).style.visibility = "hidden"; +} + +export function moreLocations(i: number): void { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + dochandler.main.get.elc("locationHidden", side).style.visibility = "hidden"; +} diff --git a/src/modules/dochandler/hover.ts b/src/modules/dochandler/hover.ts new file mode 100644 index 0000000..97cf48c --- /dev/null +++ b/src/modules/dochandler/hover.ts @@ -0,0 +1,50 @@ +import * as dochandler from "../dochandler"; +import * as settings from "../settings"; + +export function assignmentWiki(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + let showTimer: NodeJS.Timeout; + let hideTimer: NodeJS.Timeout | null = null; + showTimer = setTimeout(() => dochandler.show.assignmentWikiPreview(i), 500); + dochandler.main.get.elc("task-wiki", side).onmouseleave = () => { + hideTimer = setTimeout(() => dochandler.hide.assignmentWikiPreview(i), 200); + clearTimeout(showTimer); + }; + dochandler.main.get.elc("preview-task-wiki", side).onmouseenter = () => { + if (hideTimer !== null) clearTimeout(hideTimer); + }; +} + +export function creatureWiki(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + let showTimer: NodeJS.Timeout; + let hideTimer: NodeJS.Timeout | null = null; + showTimer = setTimeout(() => dochandler.show.creatureWikiPreview(i), 500); + dochandler.main.get.elc("creature-wiki", side).onmouseleave = () => { + hideTimer = setTimeout(() => dochandler.hide.creatureWikiPreview(i), 200); + clearTimeout(showTimer); + }; + dochandler.main.get.elc("preview-creature-wiki", side).onmouseenter = () => { + if (hideTimer !== null) clearTimeout(hideTimer); + }; +} + +export function moreEquip(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + const showTimer = setTimeout(() => dochandler.show.moreEquip(i), 500); + dochandler.main.get.elc("equipMore", side).onmouseleave = () => { + clearTimeout(showTimer); + }; +} + +export function moreLocations(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + const showTimer = setTimeout(() => dochandler.show.moreLocations(i), 500); + dochandler.main.get.elc("locationMore", side).onmouseleave = () => { + clearTimeout(showTimer); + }; +} diff --git a/src/modules/dochandler/main.ts b/src/modules/dochandler/main.ts new file mode 100644 index 0000000..5e6f78a --- /dev/null +++ b/src/modules/dochandler/main.ts @@ -0,0 +1,339 @@ +import * as dochandler from '../dochandler'; +import * as reapers from '../data/reapers'; +import * as assignments from '../data/assignnments'; +import * as settings from '../settings'; +import * as slayer from '../slayer'; +import * as logger from "../logger"; + +// Define variables +export let doubleLoaded = false; +export let singleLoaded = false; +export let reaperLoaded = false; +export let suggestedLoaded = false; +export let limitedLoaded = false; + +export module get { + export function elc(id: any, base: any): HTMLElement { + return base.getElementsByClassName(id)[0]; + } + + export function elid(id): HTMLElement { + return document.getElementById(id); + } + + export function searchInput() { + return (document.querySelector(`input[name='search-info']`)).value; + } +} + +export module reset { + export async function single() { + if (!singleLoaded) return; + const baseElement = await get.elid("base"); + baseElement.innerHTML = ""; + singleLoaded = false; + } + + export async function double() { + if (!doubleLoaded) return; + const baseElement = await get.elid("base"); + baseElement.innerHTML = ""; + doubleLoaded = false; + } + + export async function reaper() { + if (!reaperLoaded) return; + const baseElement = await get.elid("base"); + baseElement.innerHTML = ""; + reaperLoaded = false; + } + + export async function suggested() { + if (!suggestedLoaded) return; + const baseElement = await get.elid("base"); + baseElement.innerHTML = ""; + suggestedLoaded = false; + } + + export async function searchBox() { + let searchInfo: HTMLInputElement = await get.elid("search-info"); + searchInfo.value = ""; + toggle.searchText(); + } +} + +export module set { + // Set to use a double document + export async function double(task0: { name: string, count: number }, task1: { name: string, count: number }, bypass: boolean = false) { + if ((task0 == null || task1 == null) && !doubleLoaded) return; + + logger.log(`Load Double: [${task0.count}] ${task0.name} | [${task1.count}] ${task1.name}`); + + // Reset all others + await reset.single(); + await reset.reaper(); + await reset.suggested(); + + if (!doubleLoaded) { + await setup.doubleAssignment(); + } + + await dochandler.change.assignment(0, task0.name, task0.count); + await dochandler.change.assignment(1, task1.name, task1.count); + + // Log history if not bypassed + if (!bypass && task0.name && task1.name) { + settings.change.addHistory({ type: 'double', tasks: [task0, task1] }); + } + } + + // Set to use a single document + export async function single(task: { name: string, count: number }, bypass: boolean = false) { + if (task == null && !singleLoaded) return; + + logger.log(`Load Single: [${task.count}] ${task.name}`); + + // Reset all others + await reset.double(); + await reset.reaper(); + await reset.suggested(); + + if (!singleLoaded) { + await setup.singleAssignment(0); + } + + await dochandler.change.assignment(0, task.name, task.count); + + // Log history if not bypassed + if (!bypass && task.name) { + settings.change.addHistory({ type: 'single', tasks: [task] }); + } + } + + // Set to use reaper tasks doc + export async function reaper(task: { name: string, count: number }, bypass: boolean = false) { + if (task == null && !reaperLoaded) return; + + logger.log(`Load Reaper: [${task.count}] ${task.name}`); + + // Reset all others + await reset.single(); + await reset.double(); + await reset.suggested(); + + await setup.singleAssignment(2); + await dochandler.change.reaper(task.name, task.count); + + // Log history if not bypassed + if (!bypass && task.name) { + settings.change.addHistory({ type: 'reaper', tasks: [task] }); + } + } + + // Set to use suggested tasks doc + export async function suggested(bypass: boolean = false) { + if (suggestedLoaded) return; + + logger.log("Load Suggested!"); + + // Reset all others + await reset.single(); + await reset.double(); + await reset.reaper(); + + await dochandler.main.setup.suggested(); + + // Log history if not bypassed + if (!bypass) { + settings.change.addHistory({ type: 'suggestion', tasks: null }); + } + } + + // Set search button + export function searchButtonText(s: string) { + dochandler.main.get.elid("search-button").innerHTML = `${s}. . .`; + } + + // Set the search input + export function searchInput(s: string | null) { + if (s == null) return; + + (dochandler.main.get.elid("search-info")).value = s; + dochandler.main.toggle.searchText(); + } +} + +export module setup { + // Setup the main document + export async function documentMain() { + const nisElement = dochandler.main.get.elid("nis"); + nisElement.innerHTML = await fetch("./pages/doc/body.html").then(r => r.text()); + + // Setup event listeners + dochandler.main.get.elid("infobutton").addEventListener('click', dochandler.open.aboutInfo); + dochandler.main.get.elid("menubutton").addEventListener('click', dochandler.open.settingsPage); + dochandler.main.get.elid("donatebutton").addEventListener('click', dochandler.open.donate); + dochandler.main.get.elid("backbutton").addEventListener('click', settings.change.goPreviousHistory); + dochandler.main.get.elid("forwardbutton").addEventListener('click', settings.change.goNextHistory); + dochandler.main.get.elid("search-button").addEventListener('click', function () { slayer.searchTasks(); }); + dochandler.main.get.elid("search-info").addEventListener('input', dochandler.main.toggle.searchText); + dochandler.main.get.elid("search-info").addEventListener('change', function () { slayer.searchTasks(); }); + dochandler.main.get.elid("search-info").addEventListener('keyup', (event) => { + switch (event.key) { + case "ArrowUp": + dochandler.main.set.searchInput(settings.search.getPreviousHistory()); + break; + case "ArrowDown": + dochandler.main.set.searchInput(settings.search.getNextHistory()); + break; + } + }); + + // Load the list of all assignments into the search feature (aka datalist) + const reapersIndexList = await reapers.getIndexList(); + dochandler.main.get.elid("search-info-list").innerHTML = reapersIndexList; + + const assignmentsIndexList = await assignments.getIndexList(); + dochandler.main.get.elid("search-info-list").innerHTML += assignmentsIndexList; + } + + // Setup the base for double assignment + export async function doubleAssignment() { + limitedLoaded = true; + const baseElement = dochandler.main.get.elid("base"); + baseElement.innerHTML = await fetch("./pages/doc/dual.html").then(r => r.text()); + + for (let i = 0; i < 2; i++) { + const side = dochandler.getSide(i); + side.innerHTML = await fetch("./pages/doc/example.html").then(r => r.text()); + + // Setup event listeners + dochandler.main.get.elc("task-wiki", side).addEventListener('click', () => dochandler.open.wiki.assignment(i)); + dochandler.main.get.elc("task-wiki", side).addEventListener('mouseover', () => dochandler.hover.assignmentWiki(i)); + + if (!settings.controller.data.ui.limited) { + const extraInfo = dochandler.main.get.elc("extra-info", side); + extraInfo.innerHTML = await fetch("./pages/doc/example-extra.html").then(r => r.text()); + limitedLoaded = false; + + dochandler.main.get.elc("preview-task-wiki", side).addEventListener('mouseleave', () => dochandler.hide.assignmentWikiPreview(i)); + dochandler.main.get.elc("preview-creature-wiki", side).addEventListener('mouseleave', () => dochandler.hide.creatureWikiPreview(i)); + dochandler.main.get.elc("equipMore", side).addEventListener('mouseenter', () => dochandler.hover.moreEquip(i)); + dochandler.main.get.elc("equipHidden", side).addEventListener('mouseleave', () => dochandler.hide.moreEquip(i)); + dochandler.main.get.elc("locationMore", side).addEventListener('mouseenter', () => dochandler.hover.moreLocations(i)); + dochandler.main.get.elc("locationHidden", side).addEventListener('mouseleave', () => dochandler.hide.moreLocations(i)); + dochandler.main.get.elc("creature-wiki", side).addEventListener('click', () => dochandler.open.wiki.creature(i)); + dochandler.main.get.elc("creature-wiki", side).addEventListener('mouseover', () => dochandler.hover.creatureWiki(i)); + dochandler.main.get.elc("creatures", side).addEventListener('change', () => dochandler.change.creature(i)); + dochandler.main.get.elc("variants", side).addEventListener('change', () => dochandler.change.variant(i)); + } + } + + // Adjust the doc for limited and full + adjustForSettings(); + doubleLoaded = true; + } + + // Setup the base for single assignment + export async function singleAssignment(i: number) { + limitedLoaded = true; + const baseElement = dochandler.main.get.elid("base"); + baseElement.innerHTML = await fetch("./pages/doc/single.html").then(r => r.text()); + + const side = dochandler.getSide(i); + side.innerHTML = await fetch("./pages/doc/example.html").then(r => r.text()); + + // Setup event listeners + dochandler.main.get.elc("task-wiki", side).addEventListener('click', () => dochandler.open.wiki.assignment(i)); + dochandler.main.get.elc("task-wiki", side).addEventListener('mouseover', () => dochandler.hover.assignmentWiki(i)); + + if (!settings.controller.data.ui.limited) { + const extraInfo = dochandler.main.get.elc("extra-info", side); + extraInfo.innerHTML = await fetch("./pages/doc/example-extra.html").then(r => r.text()); + limitedLoaded = false; + + dochandler.main.get.elc("preview-task-wiki", side).addEventListener('mouseleave', () => dochandler.hide.assignmentWikiPreview(i)); + dochandler.main.get.elc("preview-creature-wiki", side).addEventListener('mouseleave', () => dochandler.hide.creatureWikiPreview(i)); + dochandler.main.get.elc("equipMore", side).addEventListener('mouseenter', () => dochandler.hover.moreEquip(i)); + dochandler.main.get.elc("equipHidden", side).addEventListener('mouseleave', () => dochandler.hide.moreEquip(i)); + dochandler.main.get.elc("locationMore", side).addEventListener('mouseenter', () => dochandler.hover.moreLocations(i)); + dochandler.main.get.elc("locationHidden", side).addEventListener('mouseleave', () => dochandler.hide.moreLocations(i)); + dochandler.main.get.elc("creature-wiki", side).addEventListener('click', () => dochandler.open.wiki.creature(i)); + dochandler.main.get.elc("creature-wiki", side).addEventListener('mouseover', () => dochandler.hover.creatureWiki(i)); + dochandler.main.get.elc("creatures", side).addEventListener('change', () => dochandler.change.creature(i)); + dochandler.main.get.elc("variants", side).addEventListener('change', () => dochandler.change.variant(i)); + } + + // Adjust if status is visible + const statusElement = dochandler.main.get.elc("status", side); + if (settings.controller.data.ui.status) { + statusElement.style.visibility = "visible"; + } else { + statusElement.style.visibility = "hidden"; + } + + // Adjust the doc for limited and full + adjustForSettings(); + if (i === 2) { + reaperLoaded = true; + } else { + singleLoaded = true; + } + } + + // Setup the base for suggested + export async function suggested() { + const baseElement = dochandler.main.get.elid("base"); + baseElement.innerHTML = await fetch("./pages/doc/suggested.html").then(r => r.text()); + + const suggestType = dochandler.main.get.elid("type-suggest"); + if (suggestType) { + suggestType.addEventListener('click', () => window.open("https://runescape.wiki/w/Slayer_training/High-levelled")); + } + + for (let i = 1; i <= 12; i++) { + const element = dochandler.main.get.elid(`suggestion-${i}`); + if (element) { + element.addEventListener('click', () => slayer.searchTasks(element.innerHTML)); + } + } + + suggestedLoaded = true; + } + + // If limited, set the size of the base + function adjustForSettings() { + const baseElement = dochandler.main.get.elid("base"); + const divideElement = dochandler.main.get.elid("divide"); + const copyrightElement = dochandler.main.get.elid("copyright"); + + if (settings.controller.data.ui.limited) { + baseElement.classList.remove("base-full"); + if (divideElement) { + divideElement.classList.remove("divide-full"); + } + copyrightElement.classList.remove("copyright-full"); + } else { + baseElement.classList.add("base-full"); + if (divideElement) { + divideElement.classList.add("divide-full"); + } + copyrightElement.classList.add("copyright-full"); + } + } +} + +export module toggle { + // Toggle if we are capturing screen or searching text + export function searchText() { + const searchResult = slayer.searchResult; + const autoCaptureEnabled = settings.controller.data.autoCapture.enabled; + const searchInput = dochandler.main.get.searchInput(); + + if (searchResult || (!autoCaptureEnabled && searchInput === "")) { + dochandler.main.set.searchButtonText("Capture"); + } else { + dochandler.main.set.searchButtonText("Search"); + } + } +} diff --git a/src/modules/dochandler/open.ts b/src/modules/dochandler/open.ts new file mode 100644 index 0000000..337a280 --- /dev/null +++ b/src/modules/dochandler/open.ts @@ -0,0 +1,64 @@ +import * as dochandler from '../dochandler'; +import * as settings from '../settings'; + +// Open the Donate Page (https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ) +export function donate() { + window.open("https://www.paypal.com/donate/?hosted_button_id=LRFC6766YMVTQ"); +} + +// Open the about info page +export function aboutInfo() { + window.open("./pages/about.html", null, "width=680,height=550"); +} + +// Open the settings page +export function settingsPage() { + const settingsWindow = window.open("./pages/settings.html", "_blank", "width=420,height=550"); + console.warn("Settings Opened!"); + settingsWindow?.window.console.warn("Settings Loaded!"); + + settingsWindow?.addEventListener('keyup', (e) => { + if ((e.which || e.keyCode) === 116) { + // Prevent F5 key press from refreshing the page + e.preventDefault(); + } + }); + + settingsWindow?.addEventListener('beforeunload', () => { + // Load the new settings and apply them + settings.controller.load(); + dochandler.main.toggle.searchText(); + console.warn("Settings Closed!"); + settingsWindow?.window.console.warn("Settings Saved!"); + }); +} + +export module wiki { + // Opens the wiki page for a specific task + export function assignment(i: number) { + const side = dochandler.getSide(i); + const task = dochandler.main.get.elc("name", side).innerHTML; + if (task) { + window.open('https://runescape.wiki/' + task + '_(Slayer_assignment)'); + } + } + + // Opens the wiki page for a specific creature + export function creature(i: number) { + const side = dochandler.getSide(i); + const creature = ( dochandler.main.get.elc("creatures", side)).value; + const variant = ( dochandler.main.get.elc("variants", side)).value; + if (creature && variant) { + window.open('https://runescape.wiki/' + creature + "#" + variant); + } + } + + // Opens the wiki page for a specific master + export function master(i: number, j: number) { + const side = dochandler.getSide(i); + const master = ( dochandler.main.get.elc("masterImage" + j, side)).alt; + if (master) { + window.open('https://runescape.wiki/' + master); + } + } +} diff --git a/src/modules/dochandler/show.ts b/src/modules/dochandler/show.ts new file mode 100644 index 0000000..386b4d2 --- /dev/null +++ b/src/modules/dochandler/show.ts @@ -0,0 +1,36 @@ +import * as dochandler from '../dochandler'; +import * as settings from '../settings'; + +// Show the specific Creature's preview wiki page +export function assignmentWikiPreview(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + dochandler.main.get.elc("preview-task-wiki", side).style.visibility = "visible"; +} + +// Show the specific Creature's preview wiki page +export function creatureWikiPreview(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + dochandler.main.get.elc("preview-creature-wiki", side).style.visibility = "visible"; +} + +// Show more Equipment for task +export function moreEquip(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + const equipHiddenElement = dochandler.main.get.elc("equipHidden", side); + if (equipHiddenElement.innerHTML?.trimEnd()) { + equipHiddenElement.style.visibility = "visible"; + } +} + +// Show more Locations for task +export function moreLocations(i: number) { + if (settings.controller.data.ui.limited) return; + const side = dochandler.getSide(i); + const locationHiddenElement = dochandler.main.get.elc("locationHidden", side); + if (locationHiddenElement.innerHTML?.trimEnd()) { + locationHiddenElement.style.visibility = "visible"; + } +} diff --git a/src/modules/extrafuncs.ts b/src/modules/extrafuncs.ts new file mode 100644 index 0000000..37dd8d7 --- /dev/null +++ b/src/modules/extrafuncs.ts @@ -0,0 +1,30 @@ +// Add commas into a number if its big enough +export function numberWithCommas(n: any | null): string { + if (n == null) + return "Empty"; + if (n === -666) + return "Error"; + return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +// Check if the list contains what you want to find +export function listContains(list: string[], find: string): boolean { + for (const l of list) { + if (decodeHtml(l).toLowerCase() === decodeHtml(find).toLowerCase()) + return true; + } + return false; +} + +// Get new width and height for image based on aspect ratio +export function calculateAspectRatioFit(srcWidth: number, srcHeight: number, maxWidth: number, maxHeight: number): { width: number, height: number } { + const ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight); + return { width: srcWidth * ratio, height: srcHeight * ratio }; +} + +// Decode the HTML chars that have been encoded during database downloading +export function decodeHtml(html: string): string { + const txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; +} diff --git a/src/modules/logger.ts b/src/modules/logger.ts new file mode 100644 index 0000000..3698ee7 --- /dev/null +++ b/src/modules/logger.ts @@ -0,0 +1,66 @@ +// Private queues and settings +let debugQueue: string[] = []; +let verboseQueue: string[] = []; +let queueLimit = 50; +let debugEnabled = false; +let verboseEnabled = false; + +// Set the queue limit for debug and verbose +export function setLimit(limit: number) { + queueLimit = limit; +} + +// Enable or disable debug logging +export function setDebug(enabled: boolean): void { + debugEnabled = enabled; + if (enabled) debug("Debug logging enabled"); // Force Flush the Queue +} + +// Enable or disable verbose logging +export function setVerbose(enabled: boolean): void { + verboseEnabled = enabled; + if (enabled) verbose("Verbose logging enabled"); // Force Flush the Queue +} + +// Public: Log to the normal queue and flush the queue +export function log(...messages: any[]): void { + console.log(...messages); +} + +// Public: Log to the warn queue and flush the queue +export function warn(...messages: any[]): void { + console.warn(...messages); +} + +// Public: Log to the error queue and flush the queue +export function error(...messages: any[]): void { + console.error(...messages); +} + +// Public: Log to the debug queue only if debug is enabled and flush the queue +export function debug(...messages: any[]): void { + debugQueue.push(messages.join(' ')); + trimQueue(debugQueue); + if (debugEnabled) flushQueue(debugQueue, "Debug"); +} + +// Public: Log to the verbose queue only if verbose is enabled and flush the queue +export function verbose(...messages: any[]): void { + verboseQueue.push(messages.join(' ')); + trimQueue(verboseQueue); + if (verboseEnabled) flushQueue(verboseQueue, "Verbose"); +} + +// Private: Trim the queue if it exceeds the limit (FIFO: remove first entry) +function trimQueue(queue: string[]): void { + if (queue.length > queueLimit) queue.shift(); +} + +// Private: Flush and output the entire queue, emptying it afterward +function flushQueue(queue: string[], label: string): void { + while (queue.length > 0) { + const message = queue.shift(); + if (label === "Debug") console.log(`[${label}] ${message}`); + if (label === "Verbose") console.warn(`[${label}] ${message}`); + } +} diff --git a/src/modules/settings.ts b/src/modules/settings.ts new file mode 100644 index 0000000..4dccc0e --- /dev/null +++ b/src/modules/settings.ts @@ -0,0 +1,317 @@ +import * as dochandler from "./dochandler" +import * as slayer from "./slayer" +import * as main from "./dochandler/main" +import * as logger from "./logger"; + +// Define classes +export class AutoCaptureData { } +export class UIData { } +export class DefaultData { } +export class HiddenData { } +export class SettingsData { } + +// Controls all the settings data +export class SettingsDataController { + configLoaded: boolean = false; + data = { + version: 1, + searchAlgorithim: "default", + autoCapture: { + enabled: true, + counter: true, + search: false, + loopTimer: 500, + counterTimer: 500, + dialogTimer: 5000, + searchTimer: 10000, + }, + ui: { + style: "default", + limited: false, + status: true, + counter: false, + counterTimer: 500, + historyRetentionCount: 10, + lookupRetentionCount: 0, + }, + showHidden: { + creatures: false, + eliteCreatures: false, + dragonkinCreatures: false, + godWarsCreatures: false, + ghorrockCreatures: false, + heartGielinorCreatures: false, + monsterCreatures: false, + newVarrockCreatures: false, + shadowReefCreatures: false, + strongholdSecurityCreatures: false, + summonedCreatures: false, + templeTrekkingCreatures: false, + unchartedIslesCreatures: false + }, + default: { + taskName0: "waterfiends", + taskName1: "black demons", + taskCount0: 777, + taskCount1: 666 + }, + }; + + async load() { + if (window.localStorage.getItem('version') != null) { + this.data.version = this.decodeVersion(window.localStorage.getItem('version')); + } + if (this.data.version <= 5 && !this.configLoaded) { + logger.log("(Versioning System Missing) Setting up versioning system."); + window.localStorage.removeItem('recent_task_0'); + window.localStorage.removeItem('recent_task_count_0'); + window.localStorage.removeItem('recent_task_1'); + window.localStorage.removeItem('recent_task_count_1'); + this.save(); + } + const res = await fetch("./data/version.json").then(r => r.json()); + if (this.data.version < this.decodeVersion(res['version'])) { + this.data.version = this.decodeVersion(res['version']); + } + controller.data.autoCapture.enabled = window.localStorage.getItem("auto-capture-enabled") === "true"; + controller.data.autoCapture.counter = window.localStorage.getItem("auto-capture-counter") === "true"; + controller.data.autoCapture.search = window.localStorage.getItem("auto-capture-search") === "true"; + controller.data.autoCapture.loopTimer = parseInt(window.localStorage.getItem("auto-capture-timer-loop")); + controller.data.autoCapture.dialogTimer = parseInt(window.localStorage.getItem("auto-capture-timer-dialog")); + controller.data.autoCapture.counterTimer = parseInt(window.localStorage.getItem("auto-capture-timer-counter")); + controller.data.autoCapture.searchTimer = parseInt(window.localStorage.getItem("auto-capture-timer-search")); + controller.data.ui.limited = window.localStorage.getItem("ui-limited") === "true"; + controller.data.ui.status = window.localStorage.getItem("ui-status") === "true"; + controller.data.ui.counter = window.localStorage.getItem("ui-counter") === "true"; + controller.data.ui.counterTimer = parseInt(window.localStorage.getItem("ui-counter-timer")); + + // TODO Load history here then reset the UI and load them + main.reset.single(); + main.reset.double(); + main.reset.reaper(); + main.reset.suggested(); + + if (this.data.default.taskName0 != null && this.data.default.taskName1 != null) { + await main.set.double( + { name: this.data.default.taskName0, count: this.data.default.taskCount0 }, + { name: this.data.default.taskName1, count: this.data.default.taskCount1 } + ); + } else if (this.data.default.taskName0 != null && this.data.default.taskName1 == null) { + await main.set.single({ name: this.data.default.taskName0, count: this.data.default.taskCount0 }); + } + console.warn("Config Loaded"); + this.configLoaded = true; + } + + async save() { + if (this.data.version > 1) { + window.localStorage.setItem('version', this.encodeVersion(this.data.version)); + } + window.localStorage.setItem("auto-capture-enabled", "" + controller.data.autoCapture.enabled); + window.localStorage.setItem("auto-capture-counter", "" + controller.data.autoCapture.counter); + window.localStorage.setItem("auto-capture-search", "" + controller.data.autoCapture.search); + window.localStorage.setItem("auto-capture-timer-loop", "" + controller.data.autoCapture.loopTimer); + window.localStorage.setItem("auto-capture-timer-dialog", "" + controller.data.autoCapture.dialogTimer); + window.localStorage.setItem("auto-capture-timer-counter", "" + controller.data.autoCapture.counterTimer); + window.localStorage.setItem("auto-capture-timer-search", "" + controller.data.autoCapture.searchTimer); + window.localStorage.setItem("ui-limited", "" + controller.data.ui.limited); + window.localStorage.setItem("ui-status", "" + controller.data.ui.status); + window.localStorage.setItem("ui-counter", "" + controller.data.ui.counter); + window.localStorage.setItem("ui-counter-timer", "" + controller.data.ui.counterTimer); + console.warn("Config Saved"); + } + + decodeVersion(version: string) { + const versionSplit = version.split("."); + const versionUpper = versionSplit.length > 2 ? parseInt(versionSplit[0]) : 0; + const versionLower = parseInt(versionSplit.length > 2 ? versionSplit[1] : versionSplit[0]); + const versionPatch = parseInt(versionSplit.length > 2 ? versionSplit[2] : versionSplit[1]); + return ((versionUpper * 256 * 256) + (versionLower * 256) + versionPatch); + } + + encodeVersion(version: number) { + const versionUpper = version > 256 * 256 ? version / (256 * 256) : 0; + const versionLower = version > 256 ? (version - (versionUpper * 256 * 256)) / 256 : 0; + const versionPatch = (version - (versionUpper * 256 * 256) - (versionLower * 256)); + return versionUpper + "." + versionLower + "." + versionPatch; + } +} + +export const controller = new SettingsDataController(); + +// Change history functions +export module change { + export let history: any[] = []; + export let index: number = 0; + + export function addHistory(history: any) { + if (!history || !history.tasks || !change.history[change.index]) return; + if ((history.type === "single" || history.type === "reaper") && + history.tasks[0].name === change.history[change.index].tasks[0].name) return; + if (history.type === "double" && + history.tasks[0].name === change.history[change.index].tasks[0].name && + history.tasks[1].name === change.history[change.index].tasks[1].name) return; + if (history.type === "suggestion" && history.type === change.history[change.index].type) return; + + if (change.index + 1 != change.history.length) { + change.history = change.history.slice(0, change.index + 1); + } + change.history.push(history); + change.index = change.history.length - 1; + console.warn("Save History"); + controller.save(); + } + + export function refreshCurrent() { + if (change.index < 0 || change.index >= change.history.length) return; + main.reset.single(); + main.reset.double(); + main.reset.reaper(); + main.reset.suggested(); + + const previousChange = change.history[change.index]; + if (previousChange.type === 'double') main.set.double(previousChange.tasks[0], previousChange.tasks[1], true); + if (previousChange.type === 'single') main.set.single(previousChange.tasks[0], true); + if (previousChange.type === 'reaper') main.set.reaper(previousChange.tasks[0], true); + if (previousChange.type === 'suggestion') main.set.suggested(true); + + console.warn("Save History"); + controller.save(); + } + + export function goPreviousHistory() { + if (change.index - 1 < 0) return; + const previousChange = change.history[--change.index]; + if (previousChange.type === 'double') main.set.double(previousChange.tasks[0], previousChange.tasks[1], true); + if (previousChange.type === 'single') main.set.single(previousChange.tasks[0], true); + if (previousChange.type === 'reaper') main.set.reaper(previousChange.tasks[0], true); + if (previousChange.type === 'suggestion') main.set.suggested(true); + + console.warn("Save History"); + controller.save(); + } + + export function goNextHistory() { + if (change.index + 1 >= change.history.length) return; + const nextChange = change.history[++change.index]; + if (nextChange.type === 'double') main.set.double(nextChange.tasks[0], nextChange.tasks[1], true); + if (nextChange.type === 'single') main.set.single(nextChange.tasks[0], true); + if (nextChange.type === 'reaper') main.set.reaper(nextChange.tasks[0], true); + if (nextChange.type === 'suggestion') main.set.suggested(true); + + console.warn("Save History"); + controller.save(); + } +} + +export module search { + let temp: string | null = null; + let history: string[] = []; + let index: number = 0; + + export function addHistory(value: string) { + if (!value) return; + history.push(value); + index = history.length; + temp = null; + console.warn("Save History"); + controller.save(); + } + + export function getPreviousHistory(): string | null { + tempValue(); + console.warn("Save History"); + controller.save(); + if (index - 1 < 0) return null; + if (--index === history.length) return temp; + return history[index]; + } + + export function getNextHistory(): string | null { + tempValue(); + console.warn("Save History"); + controller.save(); + if (index + 1 > history.length + (temp === "" ? 0 : 1)) return null; + if (++index === history.length + (temp === "" ? 0 : 1)) return ""; + if (temp !== "" && index === history.length) return temp; + return history[index]; + } + + function tempValue() { + const currentValue = (dochandler.main.get.elid("search-info")).value; + if (temp === null) temp = currentValue; + if (index === history.length && temp !== currentValue) temp = currentValue; + if (index === history.length + 1 && currentValue !== "") { + temp = currentValue; + --index; + } + } +} + +export async function executeDevTools(value: string) { + if (value === "devTools") { + logger.log(" ~~~ Dev Tools ~ Information Opened ~~~ "); + alt1.openBrowser("https://runeapps.org/forums/viewtopic.php?id=101"); + return; + } + + logger.log(" ~~~ Dev Tools ~ Started ~~~ "); + try { + if (value === "size") { + logger.log(`Current Size: ${document.body.clientWidth}, ${document.body.clientHeight}`); + } else if (value === "debug") { + logger.setDebug(true); + } else if (value === "verbose") { + logger.setVerbose(true); + } else if (value === "counterReader") { + const counterData = await slayer.counterReader.read(); + if (counterData) { + logger.log(`The Counter UI Collapsed [${counterData.collapsed}]`); + logger.log(`The Counter UI Old School [${counterData.OS}]`); + logger.log(`The Counter UI Reaper [${counterData.reaper}]`); + logger.log(`The Counter UI Count [${counterData.count}]`); + logger.log(`The Counter UI Task [${counterData.task}]`); + } else { + logger.log(" ~~~ Dev Tools ~ Error: Cannot read counter data! ~~~ "); + } + } else if (value === "slayerReader") { + const slayerData = await slayer.slayerReader.read(); + if (slayerData) { + logger.log(`The Slayer Reader Select Your Own [${slayerData.selectYourOwn}]`); + logger.log(`The Slayer Reader Reaper [${slayerData.reaper}]`); + logger.log(`The Slayer Reader Ticket [${slayerData.ticket}]`); + for (const a in slayerData.count) { + logger.log(`The Slayer Reader Count{${a}} [${slayerData.count[a]}]`); + } + for (const a in slayerData.task) { + logger.log(`The Slayer Reader Task{${a}} [${slayerData.task[a]}]`); + } + } else { + logger.log(" ~~~ Dev Tools ~ Error: Cannot read slayer data! ~~~ "); + } + } else if (value === "dialogReader") { + logger.log("Searching for Dialog..."); + const pos = slayer.slayerReader.dialogReader.find(); + if (!pos) { + logger.log(" ~~~ Dev Tools ~ Error: Cannot find the Dialog! ~~~ "); + return; + } + const box = slayer.slayerReader.dialogReader.read(); + if (!box) { + logger.log(" ~~~ Dev Tools ~ Error: Cannot read the Dialog! ~~~ "); + return; + } + if (box.title) logger.log(`The Dialog Box Title [${box.title}]`); + if (box.text) logger.log(`The Dialog Box Text [${box.text}]`); + if (box.opts) { + logger.log(`The Dialog Box Options (${box.opts.length}) [${box.opts}]`); + for (const [index, option] of box.opts.entries()) { + logger.log(`\t${index + 1}. ${option.text}`); + } + } + } + } catch (e) { + console.error("~~~ Dev Tools ~ Error: Issue Capturing Screen! ~~~ "); + } + logger.log(" ~~~ Dev Tools ~ Finished ~~~ "); +} diff --git a/src/modules/slayer.ts b/src/modules/slayer.ts new file mode 100644 index 0000000..0379884 --- /dev/null +++ b/src/modules/slayer.ts @@ -0,0 +1,143 @@ +import * as a1lib from "alt1"; + +import { SearchAlgorithm } from './SearchAlgorithm'; +import { SlayerDialogReader } from './SlayerDialogReader'; +import { UICounterReader } from './UICounterReader'; +import * as settings from './settings'; +import * as docHandler from './dochandler'; +import * as logger from "./logger"; + +// Setup the readers and search algo +export let searchAlgo = new SearchAlgorithm(); +export let slayerReader = new SlayerDialogReader(); +export let counterReader = new UICounterReader(); +export let searchResult = false; + +// Get a timer and setup vars +const timer = (ms: number) => new Promise(res => setTimeout(res, ms)); +let loopRunning = false; + +// Check if we can capture the screen +export function canCaptureRunescape(): boolean { + return window.alt1 && alt1.rsLinked && alt1.permissionPixel; +} + +// Capture the screen +export function captureRunescape(): any { + if (!canCaptureRunescape()) return null; + try { + return a1lib.captureHoldFullRs(); + } catch (ex) { + if (ex.message === "capturehold failed") + console.warn("Capturing screen failed! Is runescape open?"); + } + return null; +} + +// Find a task on the current screen +export async function findTask(buffer?: any): Promise { + if (!settings.controller.data.autoCapture.enabled || loopRunning || searchResult) return; + if (!buffer) buffer = captureRunescape(); + if (!buffer) return; + loopRunning = true; + docHandler.animate.loadingStop(); + + let slayerData, counterData; + slayerData = await slayerReader.read(buffer); + + if (slayerData && slayerData[0]) { + docHandler.animate.loading(); + if (slayerData.selectYourOwn) { + docHandler.main.set.suggested(); + docHandler.animate.loadingStop(); + await timer(settings.controller.data.autoCapture.dialogTimer); + loopRunning = false; + return; + } + if (slayerData.reaper && !slayerData.ticket) { + await docHandler.main.set.reaper({ name: slayerData[0].task, count: slayerData[0].count }); + } else if (slayerData.ticket) { + await docHandler.main.set.double( + { name: slayerData[0].task, count: slayerData[0].count }, + { name: slayerData[1].task, count: slayerData[1].count } + ); + } else { + await docHandler.main.set.single({ name: slayerData[0].task, count: slayerData[0].count }); + } + docHandler.animate.loadingStop(); + await timer(settings.controller.data.autoCapture.dialogTimer); + loopRunning = false; + } else if (settings.controller.data.autoCapture.counter) { + counterData = await counterReader.read(buffer); + if (counterData) { + docHandler.animate.loading(); + if (counterData.reaper && (docHandler.main.reaperLoaded || counterData.task != null)) { + await docHandler.main.set.reaper({ name: counterData.task, count: counterData.count }); + } else if (!counterData.reaper && (docHandler.main.singleLoaded || counterData.task != null)) { + await docHandler.main.set.single({ name: counterData.task, count: counterData.count }); + } + docHandler.animate.loadingStop(); + await timer(settings.controller.data.autoCapture.counterTimer); + loopRunning = false; + } else { + docHandler.animate.loadingStop(); + loopRunning = false; + } + } else { + docHandler.animate.loadingStop(); + loopRunning = false; + } +} + +// Search for tasks +export async function searchTasks(value?: string): Promise { + if (!value) value = await docHandler.main.get.searchInput(); + docHandler.main.reset.searchBox(); + settings.search.addHistory(value); + + if (value.length == 0 && (searchResult || !settings.controller.data.autoCapture.enabled)) { + searchResult = false; + docHandler.main.toggle.searchText(); + await findTask(); + return; + } else if (value.startsWith("devTools")) { + const tool = value.includes(" ") ? value.substring(value.indexOf(" ") + 1) : value; + settings.executeDevTools(tool); + return; + } else if (value.toLowerCase().includes("suggest")) { + docHandler.main.set.suggested(); + return; + } + + searchResult = true; + docHandler.main.toggle.searchText(); + const lookup = value.includes("|") ? + [value.substring(0, value.indexOf("|")), value.substring(value.indexOf("|") + 1)] : + [value]; + const tasks = []; + + for (const term of lookup) { + const data = await searchAlgo.lookup(term, lookup.length > 1); + if (data) { + logger.log("Search for (Reaper/Slayer Assignment, Alias, or Creature): " + data.task); + tasks.push({ name: data.task, reaper: data.reaper }); + } + } + + if (tasks.length > 1) { + await docHandler.main.set.double({ name: tasks[0].name, count: 1 }, { name: tasks[1].name, count: 1 }); + } else if (tasks.length == 1) { + if (tasks[0].reaper) { + await docHandler.main.set.reaper({ name: tasks[0].name, count: 1 }); + } else { + await docHandler.main.set.single({ name: tasks[0].name, count: 1 }); + } + } + + docHandler.animate.loadingStop(); + if (!settings.controller.data.autoCapture.search) { + await timer(settings.controller.data.autoCapture.searchTimer); + searchResult = false; + docHandler.main.toggle.searchText(); + } +} diff --git a/src/pages/about.html b/src/pages/about.html new file mode 100644 index 0000000..5969848 --- /dev/null +++ b/src/pages/about.html @@ -0,0 +1,96 @@ + + + + About Slayer Assistant + + + + + + +
Open Credits
+
Open Changelog
+

Need Help or Having Trouble?
Welcome to the Correct Place!

+ +

Current Slayer Assistant Look N Feel

+

This Look N Feel has been designed by the community. It has slowly but surely updated to + accomadate new information and features.

+ Slayer Assistant Interface Image + +

What activates the Slayer Assistant?

+

There are a few different instances that will cause the Slayer Assistant to update it's + information. The first is if you go get a new task from a slayer master or death for reaper tasks. The next is + while you are on a task, it will keep track of your kills vis the slayer/reaper counter GUI.

+

Once it reads an interface similar to the examples below it will save this assignment information + and automatically do a lookup for you. You can also click on Capture to make it try and lookup a task on the + screen at the very moment.

+

The following are examples of the interfaces it can read for slayer tasks.

+
+ Slayer Assignment Interface Image +

Example Slayer Assignment Interface

+
+
+ VIP Ticket Interface Image +

Example Slayer Ticket Assignment Interface

+
+
+ Slayer Counter Expanded Image + +

Example Slayer Counter Interface

+

This interface will cause it to lookup the exact assignment that is given (if expanded) + and display relevant data; otherwise, it will just attempt to update the count of the current task it has + loaded.

+
+

The following are examples of the interfaces it can read for reaper tasks.

+
+ Reaper Assignment Interface Image +

Example Reaper Assignment Interface

+

This interface will cause it to lookup the exact assignment that is given and display + relevant data.

+
+
+ Reaper Counter Expanded Image + +

Example Reaper Counter Interface

+

This interface will cause it to lookup the exact assignment that is given (if expanded) + and display relevant data; otherwise, it will just attempt to update the count of the current task it has + loaded.

+
+

The following are examples of the interfaces it can read for select your own assignment tasks. +

+
+ Select Your Own Assignment Interface Image +

Example Select Your Own Assignment Interface

+

This interface will cause it to display a list of suggested tasks and why they are + suggested for the Select Your Own Assignment.

+
+ + +

Did you know?

+

There is now a search history you can use with the up and down arrow key? It resets + everytime you close the app.

+

If you hover over the assignment wiki, creature wiki, and See More... on the app it shows + more data. Give it a try

+ Right Click Image +

Opens up Slayer Assistant

+ + + + + + + + \ No newline at end of file diff --git a/src/pages/changelog.html b/src/pages/changelog.html new file mode 100644 index 0000000..c5141fd --- /dev/null +++ b/src/pages/changelog.html @@ -0,0 +1,438 @@ + + + + Changelog + + + + + +
Go Back
+ +

06/22/2024 - Bug Fixes and Future Updates

+

+ Bug Fixes: Quite a bit of minor (and a couple major) bugs that poped up during the newest development of + the app has been fixed in this release. There was quick pushes for the major bugs to get rid of them as fast as + possible. +

+

+ Basic Settings Added: Basic settings have been added, more will come in the future. The current settings + will allow at least simple control over the app so far. A few to more coming soon is search and lookup history. +

+

+ Updates to Allow Better Future Updates: Quite a bit of the backend of the app has been re-wrote to allow + better future updates. A couple examples are adding settings to allow better usability of the app, making other + looks for the app to allow a more personal feel for the app, and adding comments to the code along with + restructuring it to be easier to navigate and understand. All of these changes were to allow the next future + updates to be easier to implement and the settings are working but not all of them have been added where you can + change them. This should come in the next update. +

+

+ A few Tweaks: There is also a few tweaks to different parts of the app that happened as well due to these + changes. The About Page width has changed to make it easier to read. The LookNFeel of the app has been slightly + altered during the update due to making it more flexible for the future style update. The LookNFeel also has a + limited UI option now that is changable in the settings. +

+ +

06/15/2024 - Added Counter UI Support

+

+ Slayer and Reaper Counter UI: Full support added. When collapsed, it updates only the current assignment + count; when expanded, it loads and updates the assignment unless it's already loaded. +

+

+ Task Comparison: Compare Slayer tasks by separating them with a "|". Note: Reaper assignments cannot be + compared. +

+

+ Suggested Slayer Assignments: For level 120, "Select Your Own Assignment" dialog now includes suggested + tasks. Search "suggest" in the search bar to view suggestions. +

+

+ Navigation Enhancements: Navigate forward and backward through lookups, making it easy to revisit + previous tasks and suggested assignments. +

+

+ UI Adjustments: Improved look and feel for all pages when resized. Additional tweaks are planned for + perfection. +

+

+ Project Adjustments: Updates now designed to avoid disruptions, ensuring smoother future Alt1 updates. +

+

+ Code Refactoring: Improved readability and data separation into Readers for better portability. Skillbert + can now extract Readers for the main Alt1 source. +

+

+ New DevTools: Added debugging functions for testing and resolving issues. +

+ + +

06/11/2024 - Major Recode +

+

Today is a special day because a massive recode has came for Slayer Assistant. This recode + started on 06/02/2024. Most of the changes were due to an update to the base alt1. You may not see a lot of + changes but there is a lot, so lets go over them all.

+

The recode has allowed me to have all the code neater so updates should be much easier. Also + new features won't be as hard to add in because the code before was a huge mess

+

Features coming soon

+
    +
  • Update the forum post
  • +
  • Add in some basic settings
  • +
  • 120 Slayer Assignment suggestions (Needs Page Made)
  • +
  • Ability to lookup task via Slayer Counter RS3
  • +
  • Ability to lookup task via Reaper Counter RS3
  • +
  • Add support for Ushabti
  • +
+

Features added

+
    +
  • Adjusted Search Algorithm to work better
  • +
  • Reaper Task support has been added (Needs more Work)
  • +
  • Added Necromancy Support to databaase and app
  • +
  • Ability to Ctrl+V paste an image for lookup
  • +
  • Ability to Drag & Drop an image for lookup
  • +
  • Added a small copyright at the bottom of all pages
  • +
  • Search bar now has history using up and down arrows
  • +
      +
    • It also temp saves the current search too
    • +
    +
  • Optimized the updating of current task
  • +
      +
    • This way it won't flicker on updates
    • +
    +
+

Features updated

+
    +
  • Massive fixes to the database
  • +
  • Updated the database for new content
  • +
  • Updated the about page with new info
  • +
  • Capture Loop has been optimized
  • +
  • Capture Button has now been added
  • +
  • Search Button is also the Capture Button
  • +
      +
    • It changes when you type in search
    • +
    +
+

Features kept from previous version

+
    +
  • Help/About, Settings, & Donate Buttons
  • +
  • Search Bar and Capture/Search Button
  • +
  • Ability to show single Assignments
  • +
  • Ability to show 2(vs) Assignments
  • +
  • Important Info Shown at All Times
  • +
      +
    • Wiki, Kills, & Assignment
    • +
        +
      • Total Exp for Assignment
      • +
      • Hover Assignment Wiki
      • +
          +
        • Slayer Master Info
        • +
        +
      +
    • Locations for Assignment
    • +
    • Equipment Suggested for Assignment
    • +
    • Wiki, Creatures, & Creature Variants
    • +
        +
      • Slayer Level & Exp
      • +
      • Weakness & Susceptible
      • +
      • Hover Creature Wiki
      • +
          +
        • Image
        • +
        • Stats
        • +
            +
          • Combat Level
          • +
          • Lifepoints
          • +
          • Defence
          • +
          +
        • Exp
        • +
            +
          • Combat
          • +
          • Lifepoints
          • +
          +
        • Max Hit
        • +
            +
          • Melee
          • +
          • Range
          • +
          • Magic
          • +
          • Spec
          • +
          +
        +
      +
    +
+ +

04/27/2024 - Minor Bug Fixes

+

Fixed a bug that caused only the first assignment to get loaded and not the second one.

+

Fixed a bug that caused the wiki links to not go to the currently loaded assignment.

+ +

02/13/2022 - Minor but Needed

+

Finally have a little time to work on updating the Forum Post as well as the credits. Also going + to update the about section soon.

+ +

12/24/2021 - Merry Christmas

+

Finished updating all the old changelog information, some may be missing but the most of it is + there for now. Need to backup discord info during development so I can check later.

+

Adding about info section soon...

+

Current App Features to Date

+
    +
  • Help/About, Settings, & Donate Buttons
  • +
  • Search Bar and Button
  • +
  • Ability to show 1 or 2(vs) Assignments
  • +
  • Important Info Shown at All Times
  • +
      +
    • Wiki, Kills, & Assignment
    • +
        +
      • Total Exp for Assignment
      • +
      • Hover Assignment Wiki
      • +
          +
        • Slayer Master Info
        • +
        +
      +
    • Locations for Assignment
    • +
    • Equipment Suggested for Assignment
    • +
    • Wiki, Creatures, & Creature Varants
    • +
        +
      • Slayer Level & Exp
      • +
      • Weakness & Susceptible
      • +
      • Hover Creature Wiki
      • +
          +
        • Image
        • +
        • Stats
        • +
            +
          • Combat Level
          • +
          • Lifepoints
          • +
          • Defence
          • +
          +
        • Exp
        • +
            +
          • Combat
          • +
          • Lifepoints
          • +
          +
        • Max Hit
        • +
            +
          • Melee
          • +
          • Range
          • +
          • Magic
          • +
          • Spec
          • +
          +
        +
      +
    +
+ +

12/09/2021 - Beta Updated

+

Massively adjusted the look and feel of the app. Moved a lot of data into a "Wiki Preview Screen" + that shows up when hovering over the wiki button.

+

Adjusted and added a lot of the user experience features.

+
    +
  • Hover Assigment Wiki for Slayer Master Info
  • +
  • Hover Creature Wiki for Creature Info
  • +
  • Adjusted/Added hovering effects timer
  • +
  • Added donate button just to have it for now
  • +
+ +

11/29/2021 - Beta Updated

+

Added 2 items that was missed before even though they aren't complete yet.

+
    +
  • Added About Info Button
  • +
  • Added Settings Button
  • +
+ +

11/19/2021 - Beta Released

+

Released the Beta to the public as it was working well enough for the public to use without worry + about it crashing.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ +

11/09/2021 - Beta Getting Close

+

Fixed almost all the major bugs and most of the minor bugs, next is to finish adjusting the look + of the new app.

+

With a massive amount of help from Emma + Kitty, I was finally able to add the first bit of + user experience features to the app making the list of creatures smaller and easiler to navigate. Also default + selected creatures were added. These features still need refined more so they do everything they are supposed + to.

+ +

08/12/2021 - Changelog Added

+

Added the changelog and about webpages for the app; however, still haven't added them to the app + intself. Still need to work on settings and updating the look and feel even more to work out the rest of the + bugs.

+ +

08/05/2021 - New Alpha Release

+

Released the alpha to the development channel on Discord with a few bugs and a lot of information + missing to see how it worked for others before releasing to the public.

+

Features partially or fully added.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ +

07/09/2021 - Major Bug Found

+

Soon after doing the redesign of the Database Updater, a major bug came up that almost crashed + the computer many times. Come to find out this was a bug in the compiler I was using and had nothing to do with + the way I created the app at all.

+ +

06/11/2021 - Redesign Revealed

+

Revealed the redesigned look and feel of the Slayer Assistant to the Development channel on + RuneApps Discord. Public didn't have access to the app but got to see it's progress.

+

Features partially or fully added.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ +

05/20/2021 - Redesign Started

+

Due to a major computer crash that required a re-install of the OS, all source for the database + updater was lost. This lead to a complete redesign of the app for many reasons, but the biggest was due to the + system not supporting cluster tasks.

+

After a lot of discussion with Zykrow on the + matter, I started working on the new database + updater and redesigning the Alt1 app.

+

Features planned for the redesign.

+
    +
  • Ability to search for an assignment
  • +
  • Settings for app
  • +
  • About info for app
  • +
  • Refresh/reload button to allow manual reading of task incase the loop breaks
  • +
  • Compare 2 Assignments side by side
  • +
  • Most Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Locations for assignments
    • +
    • Equipment required for assignments
    • +
    • Slayer Master info per assignment
    • +
    • Cluster Task Support (Creature List and Variants)
    • +
    • Wiki links for each assignment and creature
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness & Susceptible
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
  • Donate to contributers button
  • +
+ +

05/14/2021 - First Release

+

With a lot of assistance from Skillbert on + discord, I was finally able to create my first + basic app on Alt1.

+

Not long after the first app was working, I was able to turn it into the Slayer Assistant app. + This was not without help from the rest of the discord comunity though. crazye97 assisted a lot to get the first version created. troy236 gave me the answer to my last issue with + the app allowing me to get it released.

+

Here is a list of all features supported in this version.

+
    +
  • A button to read the task on screen incase the app had a glitch and wasn't working correctly
  • +
  • Compare 2 Assignments side by side
  • +
  • Basic Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Creature information
    • +
        +
      • Name, Image, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness (as Displayed on wiki)
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    • Wiki links for each creature
    • +
    +
+ +

05/12/2021 - Project Started

+

Here is a little history on how this app came to be.

+

After a long conversation with Zykrow on the + viability of a new slayer app for Alt1, I + started doing some research on creating Alt1 apps and come to find out it is not hard but not easy either; + however, redesigning the wheel is bad practice so lets see if anyone else has already created an app like this. +

+

To my suprise there was one; however, it was outdated and no source code was known to exist for + it. Oh well. Time to start designing it then.

+

The original Slayer Decision App was used as a base for the look and feel for the new app I + started creating. The original app can be found here.

+

There was a lot discussed on what could be added to the app; however, quite a bit of it was for + way later on once the app was made and working. So here is a list of what was planned for the first release.

+
    +
  • Ability to search for an assignment
  • +
  • Compare 2 Assignments side by side
  • +
  • Basic Information for Assignments
  • +
      +
    • Kills Required and Total Exp
    • +
    • Creature information
    • +
        +
      • Name, Image, Location, and Examine Info
      • +
      • Level, Slayer Lvl, LP, Defence
      • +
      • Max Hits for Melee, Range, Magic, and Spec
      • +
      • Weakness (aka. Melee, Range, Magic)
      • +
      • Exp for Combat, Lifepoints, and Slayer
      • +
      +
    +
+ + + + + + + \ No newline at end of file diff --git a/src/pages/credits.html b/src/pages/credits.html new file mode 100644 index 0000000..c8ca3f8 --- /dev/null +++ b/src/pages/credits.html @@ -0,0 +1,81 @@ + + + + Credits + + + + + +
Go Back
+

Credit due where deserved

+

Assistance with Slayer Assistant for Alt1

+
    +
  • codedninja - + For creating the original app and inspiring the look and feel of this app
  • +
  • Skillbert - For all the assistance during + the creation of this app, as well as for creating Alt1 Toolkit
  • +
  • Zykrow - For support and assistance during the + entire development of this app
  • +
  • crazye97 - For all the assistance during the + development of this app, too much to specify each one
  • +
  • troy236 - For giving me the answer to why I + couldn't edit the src of an img in javascript
  • +
  • Emma Kitty - For helping manage the + database; formatting, adding manual entries, and adding user experience content to the app
  • +
  • Annie the Eagle - For help with + adjusting the Look and Feel of the app
  • +
  • MrSlayerGod - For suggestions on the + newest Look and Feel of the app
  • +
  • Poop Skewer - For suggesting moving the + app over to github for better uptime
  • +
  • display_this - For reporting app breaking bugs + that kept the app from running at its full potential
  • +
  • Leridon - For assisting me on getting the + slayer/reaper counter lookup started as well as helping fix major issues during upgrading alt1 source
  • +
  • Nex ex Umbra - For assitance on getting the + Select + your own task detection to work
  • +
  • overlord1234 + & David - For the Levenshtein distance algorithim for the search feature
  • +
+ +

Assistance with Slayer Assistant Database Updater

+
    +
  • Runescape Wiki - For having an amazing + database that I can just parse to make use of in this app
  • +
  • Chiev Hunter - For assistance in fixing + the slayer assignment wiki so my updater would quit throwing an error
  • +
  • Wahi - For explaining the Wights task was old + content that was removed
  • +
  • Robert571 - For suggesting the new query + search for database downloading from the wiki
  • +
  • Im Wired In - For all the assistance in + helping to figure out how to use the new query search for database downloading from the wiki
  • +
+ +

For Creating Something Amazing

+
    +
  • Jagex - For creating an amazing game that has + many more years to come
  • +
  • Runescape - For still being here after + all these years, it has came a long way
  • +
  • Runescape Wiki - For having an amazing + database for all of the RuneScape community
  • +
  • Chat GPT - For creating something + amazing that can assist with anything
  • +
  • Skillbert - For creating Alt1 Toolkit and + keeping it maintained
  • +
+ + + + + + + \ No newline at end of file diff --git a/src/pages/doc/body.html b/src/pages/doc/body.html new file mode 100644 index 0000000..23b883e --- /dev/null +++ b/src/pages/doc/body.html @@ -0,0 +1,18 @@ + + +
+
+ \ No newline at end of file diff --git a/src/pages/doc/dual.html b/src/pages/doc/dual.html new file mode 100644 index 0000000..eb01f66 --- /dev/null +++ b/src/pages/doc/dual.html @@ -0,0 +1,3 @@ +
+
+
\ No newline at end of file diff --git a/src/pages/doc/example-extra.html b/src/pages/doc/example-extra.html new file mode 100644 index 0000000..f79605b --- /dev/null +++ b/src/pages/doc/example-extra.html @@ -0,0 +1,134 @@ +
+
+
Chaeldar Kills: Coming Soon...
+
Duradel Kills: Coming Soon...
+
Jacquelyn Kills: Coming Soon...
+
Kuradal Kills: Coming Soon...
+
Laniakea Kills: Coming Soon...
+
Mandrith Kills: Coming Soon...
+
Mazchna Kills: Coming Soon...
+
+
+ +
+
+
+
Stats
+ + + +
???
+
???
+
???
+
+ +
+
Exp
+ + +
???
+
???
+
+ +
+
Max Hit
+ + + + + +
???
+
???
+
???
+
???
+
???
+
+
+ +
+
Equipment
+
+
+
See More...
+
+
+
+
+
+
+
+
+
+
+ +
+
Locations
+
+
+
See More...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
Creatures
+
+ + + + +
+ +
+
Summary
+
Slayer Level
+
Slayer Exp
+ + +
???
+
???
+ +
+

Weakness

+ + +
+ +
+

Susceptible

+ + +
+
\ No newline at end of file diff --git a/src/pages/doc/example.html b/src/pages/doc/example.html new file mode 100644 index 0000000..4a8d762 --- /dev/null +++ b/src/pages/doc/example.html @@ -0,0 +1,25 @@ +
(Default)
+ +
+
+ +
???
+
???
+
Exp:
+
???
+
+ +
+
Timer: +
??:??:??
+
+
Kills/Hr: +
?,???
+
+
XP/Hr: +
???,???
+
+
+ + +
\ No newline at end of file diff --git a/src/pages/doc/single.html b/src/pages/doc/single.html new file mode 100644 index 0000000..eb4fc4b --- /dev/null +++ b/src/pages/doc/single.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/pages/doc/suggested.html b/src/pages/doc/suggested.html new file mode 100644 index 0000000..9d6588b --- /dev/null +++ b/src/pages/doc/suggested.html @@ -0,0 +1,64 @@ +
(Suggested)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssignmentSlayer xp/hr
Gemstone dragons1400k (Hydrix)
Ripper Demon700k (Darklight)
Soul devourer680k
Shadow creatures680k (Manifest)
Nightmare650k
Lost Grove creatures610k (Golem)* +
Acheron mammoth600k
Corrupted creatures580k (Worker)
Elves560k* +
Living wyverns530k
Crystal shapeshifters500k
Greater demons1000k (Berserkers)* +
+
* - More information on hover
\ No newline at end of file diff --git a/src/pages/settings.html b/src/pages/settings.html new file mode 100644 index 0000000..d26e60b --- /dev/null +++ b/src/pages/settings.html @@ -0,0 +1,73 @@ + + + + Slayer Assistant Settings + + + + + + +

Settings

+

More Coming soon... This is only the basic settings for now

+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
Close Settings
+ + + + + + \ No newline at end of file diff --git a/src/styles/default/about.css b/src/styles/default/about.css new file mode 100644 index 0000000..ab80731 --- /dev/null +++ b/src/styles/default/about.css @@ -0,0 +1,32 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family:sans-serif; font-size:14px; overflow-x:hidden; margin:5px; width: calc(100% - 10px);} +h2{text-align: center; font-size: 22px; font-weight:normal;} +h2:first-child{margin-top:5px;} +h3{text-align: center; font-size: 18px; border-top:3px double rgb(255, 231, 185); font-weight:bold;} +h4{text-align: center; font-size: 16px; border-top:3px dashed rgb(255, 231, 185); font-weight:normal;} +table{margin:auto;} +img{width:100%;} +img.expanded{width:60%;} +img.collapsed{width:35%;} + +/* Sections */ +.info{text-align: center;} +.example{border: 1px solid rgb(84, 85, 66); margin-top: 5px; margin-bottom: 5px;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/src/styles/default/changelog.css b/src/styles/default/changelog.css new file mode 100644 index 0000000..34d996a --- /dev/null +++ b/src/styles/default/changelog.css @@ -0,0 +1,22 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family: sans-serif; font-size: 14px; overflow-x: hidden; margin: 10px; width: calc(100% - 10px);} +h2{border-top:1px solid #A3A3A3; font-weight: normal; margin-top: 25px; margin-bottom: -10px; color: #068b1c;} +h2:first-child{margin-top:10px;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/src/styles/default/credits.css b/src/styles/default/credits.css new file mode 100644 index 0000000..f0367a6 --- /dev/null +++ b/src/styles/default/credits.css @@ -0,0 +1,22 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family:sans-serif; font-size:14px; overflow-x:hidden; margin: 10px; width: calc(100% - 10px);} +h2{border-top:1px solid #A3A3A3; font-weight:normal; margin-top: 25px; margin-bottom:-10px; color:#068b1c;} +h2:first-child{margin-top:10px;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/src/styles/default/index.css b/src/styles/default/index.css new file mode 100644 index 0000000..a079ec4 --- /dev/null +++ b/src/styles/default/index.css @@ -0,0 +1,190 @@ +/* Global App settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-decoration: none; cursor: pointer;} +a:hover {color: #a19100; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-decoration: none; cursor: pointer;} + +/* Base Sections of App */ +div#menubar {position: relative; width: 100%; height: 34px;} +div#base {position: relative; width: 100%; height: 70px;} +#copyright {position: relative; width: 100%; height: 13px; font-family: 'trajan-pro-3'; font-size: 11px; color: #5a6400; text-align: center; } +div.base-full {height: 310px;} +.copyright-limited {top: 0px;} +.copyright-full {top: 250px;} + +/* Menu Bar Controls */ +#infobutton {position: absolute; width: 12px; height: 12px; top: 00px; left: 00px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/infoicon.png') 0px 0px / cover;} +#menubutton {position: absolute; width: 12px; height: 12px; top: 16px; left: 00px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/settingscog.png') 0px 0px / cover;} +#donatebutton {position: absolute; width: 12px; height: 12px; top: 32px; left: 00px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/donate.png') 0px 0px / cover;} +#backbutton {position: absolute; width: 12px; height: 12px; top: 32px; left: 16px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/back.png') 0px 0px / cover;} +#forwardbutton {position: absolute; width: 12px; height: 12px; top: 32px; left: 32px; z-index: 11; cursor:pointer; background: url('../../images/ui/default/forward.png') 0px 0px / cover;} +#infobutton:hover {background-position: 0px -12px;} +#menubutton:hover {background-position: 0px -12px;} +#donatebutton:hover {background-position: 0px -12px;} +#backbutton:hover {background-position: 0px -12px;} +#forwardbutton:hover {background-position: 0px -12px;} + +/* Search Box & Button */ +#search-info {position: relative; width: calc(100% - 20px - 100px); height: 20px; top: 3px; left: 18px; color:#a39e00; cursor:pointer; background-color:#2f2f2f;} +#search-button {position: absolute; width: 66px; height: 33px; top: 0px; right: 0px; color:#370042; font-size: 18px; text-align: left;} + +/* Search Button LookNFeel */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin-left: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active {-webkit-filter: brightness(1.2); filter: brightness(1.2);} +.nisbutton.fakeactive {-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Loading Spinner */ +.loading-container {position: absolute; width: 20px; height: 20px; top: 8px; right: 8px; cursor:pointer; } +.loading {width: 20px; height: 20px; display: flex; justify-content: center; visibility: hidden;} +.loading::after {width: 12px; height: 12px; content: ""; border: 3px dashed #13314e; border-radius: 100%; transform: rotate(0.125turn); animation: loading 2.5s ease-in-out infinite;} +@keyframes loading {to {transform: rotate(1.130turn);}} + +/* Division Bar */ +div.left {position: absolute; width: calc(050% - 01px); left: 00%;} +div.right {position: absolute; width: calc(050% - 01px); left: 50%;} +div.single {position: absolute; width: 100%; left: 00%;} +div#divide {position: absolute; width: 2px; left: calc(50% - 2px); background-color: #afad1f;} +.divide-limited {height: 65px;} +.divide-full {height: 310px;} + +/* Headers for Sections */ +div#title-1 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-2 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-3 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-4 {position: absolute; height: 11px; left: calc(15%); right: calc(15%); z-index: 22; margin-top: -06px; font-size: 12px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-5 {position: absolute; height: 11px; left: calc(15%); right: calc(15%); z-index: 22; margin-top: -08px; font-size: 12px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-6 {position: absolute; height: 11px; left: calc(15%); right: calc(15%); z-index: 22; margin-top: -08px; font-size: 12px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} +div#title-7 {position: absolute; height: 13px; left: calc(25%); right: calc(25%); z-index: 10; margin-top: -10px; font-size: 14px; text-align: center; padding: 0px 8px 0px; color: #778899; background: url("../../images/ui/default/background.png");} + +/* Type of Assignment */ +div.type {position: relative; width: 100%; height: 22px; color: #008000; font-family: 'trajan-pro-3'; font-size: 20px; text-align: center;} +.right div.type {color: #ff0000;} +#type-reaper {color: #ffd700;} +#type-suggest {color: #ff00d4; cursor:pointer;} +#type-suggest:hover {color: #6d0077;} + +/* Suggested Creatures */ +span.starnote {position: relative; display: inline; color: #ffd700; font-size: 11px;} +div#footnote {position: relative; width: 100%; height: 015px; left: 0%; top: 0px; color: #ffd700; font-size: 11px; text-align: right;} +table#suggestions {position: relative; width: 100%; height: 200px; left: 0%; top: 0px; font-size: 16px; text-align: left;} +table#suggestions thead td {color: #ffd700; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +table#suggestions td {color: #39cf96; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +td[id^="suggestion"] {color: #008000; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; cursor:pointer;} +td[id^="suggestion"]:hover {color: #00db00;} + +/* Assignment Info */ +div.info {position: relative; width: 068%; height: 40px; left: 3px; top: 0px; margin-top: 5px; text-align: left;} +div.info div.task-wiki {position: absolute; width: 24px; height: 24px; left: 0px; top: -4px; cursor:pointer; text-align: left; background: transparent url("../../images/ui/default/wikipedia.png") 0px 0px / cover;} +div.info div.kills {position: absolute; width: 40px; height: 16px; left: 18px; top: 0px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.info div#slayer-exp-text {position: absolute; width: 33px; height: 16px; left: 3px; top: 20px; text-align: left;} +div.info div.name {position: absolute; width: calc(100% - 65px); height: 16px; left: 62px; top: 0px; text-align: left; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.info div.total-slayer-exp {position: absolute; width: calc(100% - 40px); height: 16px; left: 35px; top: 20px; text-align: left; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.left div.info {width: 100%;} +div.right div.info {width: 100%;} +div.info:hover {background-color: #324e6165;} +div.info div.task-wiki:hover {background-position:0px -24px;} + +/* Preview Task Wiki */ +div.preview-task-wiki {position: absolute; width: calc(100% - 8px); height: auto; left: 0px; top: 0px; z-index: 11; visibility: hidden; text-align: left; border: 2px ridge #a19100; background: url("../../images/ui/default/background.png");} +div.preview-task-wiki div.masters {position: relative; width: calc(100% - 8px); height: auto; left: 0px; top: 0px; text-align: left;} +div.preview-task-wiki div.masterTitle {position: relative; width: 100%; height: 27px; font-size: 18px; margin: 2px 0px 0px 3px; border-bottom: 3px double #a19100;} +div.preview-task-wiki div[class*="masterInfo"] {position: relative; width: 100%; height: 27px; cursor:pointer; font-size: 14px; padding: 2px 0px 0px 3px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.preview-task-wiki img[id^="masterImage"] {position: relative; width: 20px; height: 27px; cursor:pointer; vertical-align: middle; text-align: center;} +div.preview-task-wiki div[class*="masterInfo"]:hover {background-color: #64643065;} +div.left div.preview-task-wiki {left: 0px;} +div.right div.preview-task-wiki {left: 4px;} + +/* Status Menu */ +div.status {position: absolute; width: 100px; height: 60px; right: 0px; top: 2px; z-index: 10; text-align: left; border: 2px ridge #5a6400;} +div.status div.kills-per-text {position: absolute; width: 100%; height: calc(33% - 6px); left: 0px; top: 33%; padding-top: 2px; font-size: 16px; border-top: 1px solid #a19100; margin-top: -2px;} +div.status div.exp-per-text {position: absolute; width: 100%; height: calc(33% - 6px); left: 0px; top: 66%; padding-top: 2px; font-size: 16px; border-top: 1px solid #a19100; margin-top: -2px;} +div.status div.timer-text {position: absolute; width: 100%; height: calc(33% - 6px); left: 0px; top: 0%; padding-top: 2px; font-size: 16px; margin-top: -2px;} +div.status div.timer-value {position: absolute; width: calc(100% - 46px); height: 100%; left: 46px; top: 0px; padding: 2px 2px 0px 0px; font-size: 16px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.status div.kills-per-hour {position: absolute; width: calc(100% - 60px); height: 100%; left: 60px; top: 0px; padding: 2px 2px 0px 0px; font-size: 16px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.status div.exp-per-hour {position: absolute; width: calc(100% - 50px); height: 100%; left: 50px; top: 0px; padding: 2px 2px 0px 0px; font-size: 16px; text-align: right; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +div.status div.timer-text:hover {background-color: #324e6165;} +div.status div.kills-per-text:hover {background-color: #324e6165;} +div.status div.exp-per-text:hover {background-color: #324e6165;} +div.left div.status {visibility: hidden;} +div.right div.status {visibility: hidden;} + +/* Extra Data (Not shown on limited) */ +div.extra-info {position: relative; width: 100%;} + +/* Equpiment */ +img#equip-image {position: relative; width: 18px; height: 18px;} +div.equipment {position: relative; width: calc(100% - 8px); height: 60px; left: 5px; top: 0px; padding-top: 3px; text-align: left; border-top: 3px double #a19100;} +div.equipment div[class*="equipInfo"] {position: relative; width: 100%; height: auto; text-align: left;} +div.equipment div.equipHidden {position: absolute; width: 100%; height: auto; left: 0px; top: 42px; z-index: 11; margin-left: -3px; visibility: hidden; border: 3px groove #778899; border-top-style:none; background: url("../../images/ui/default/background.png");} +div.equipment div.equipMore {position: absolute; width: 100%; height: 16px; left: 0px; top: 42px; cursor:pointer; text-decoration: underline; color: #778899; font-size: 10px; text-align: left;} +div.equipment div[class*="equipInfo"]:hover {background-color: #64643065;} +div.equipment div.equipMore:hover {background-color: #64643065;} + +/* Locations */ +img#location-image {position: relative; width: 18px; height: 18px;} +div.locations {position: relative; width: calc(100% - 8px); height: 60px; left: 5px; top: 0px; padding-top: 3px; text-align: left; border-top: 3px double #a19100;} +div.locations div[class*="locationInfo"] {position: relative; width: 100%; height: auto; text-align: left;} +div.locations div.locationHidden {position: absolute; width: 100%; height: auto; left: 0px; top: 42px; z-index: 11; margin-left: -3px; visibility: hidden; border: 3px groove #778899; border-top-style:none; background: url("../../images/ui/default/background.png");} +div.locations div.locationMore {position: absolute; width: 100%; height: 16px; left: 0px; top: 42px; cursor:pointer; text-decoration: underline; color: #778899; font-size: 10px; text-align: left;} +div.locations div[class*="locationInfo"]:hover {background-color: #64643065;} +div.locations div.locationMore:hover {background-color: #64643065;} + +/* Creature Wiki */ +div#creature-container {position: relative; width: calc(100% - 08px); height: 32px; left: 03px; top: 0px; padding-top: 3px; border-top: 3px double #a19100;} +select.creatures {position: absolute; width: calc(64% - 10px); height: 20px; left: 24px; top: 9px; cursor:pointer; background-color: #2f2f2f;} +select.variants {position: absolute; width: calc(34.5% - 15px); height: 20px; left: calc(65% + 16px); top: 9px; cursor:pointer; background-color: #2f2f2f;} +div.creature-wiki {position: absolute; width: 24px; height: 24px; left: -2px; top: 5px; cursor:pointer; text-align: left; background: transparent url("../../images/ui/default/wikipedia.png") 0px 0px / cover;} +div.creature-wiki:hover {background-position: 0px -24px;} + +/* Creature Wiki Preview */ +div.preview-creature-wiki {position: absolute; width: calc(100% - 6px); height: 178px; left: 0px; top: -42px; z-index: 11; visibility: hidden; border: 2px ridge #a19100; background: url("../../images/ui/default/background.png"); text-align: left;} +div.preview-creature-wiki div.image-container {position: absolute; width: 50%; height: 50%; left: 0px; top: 0px; border-top: 1px solid #a19100; border-right: 1px ridge #a19100;} +div.preview-creature-wiki div.stats {position: absolute; width: 50%; height: 50%; left: 50%; top: 0px; font-size: 12px; text-align: center; border-top: 1px solid #a19100;} +div.preview-creature-wiki div.exp {position: absolute; width: 50%; height: 50%; left: 0px; top: 50%; font-size: 12px; text-align: center; border-top: 3px double #a19100; border-right: 1px ridge #a19100; padding-top: -1px;} +div.preview-creature-wiki div.max-hits {position: absolute; width: 50%; height: 50%; left: 50%; top: 50%; font-size: 12px; text-align: center; border-top: 3px double #a19100; padding-top: -1px;} +div.preview-creature-wiki img.image {display: block; margin-left: auto; margin-right: auto; background-color: transparent;} +div.preview-creature-wiki div.image-container:hover {background-color: #64643065;} +div.preview-creature-wiki div.stats:hover {background-color: #64643065;} +div.preview-creature-wiki div.exp:hover {background-color: #64643065;} +div.preview-creature-wiki div.max-hits:hover {background-color: #64643065;} +div.left div.preview-creature-wiki {left: -2px;} +div.right div.preview-creature-wiki {left: 3px;} + +/* Summary */ +div.summary {position: relative; width: calc(100% - 8px); height: 75px; left: 5px; top: 0px; padding-top: 3px; font-size: 12px; text-align: center; border-top: 3px double #a19100;} +div.summary:hover {background-color: #324e6165;} + +div.summary div.weaknessBox {position: absolute; width: 048%; height: 35px; left: 50%; top: 5px; font-size: 12px; text-align: center;} +div.summary div.weaknessBox img {position: relative; width: 18px; height: 18px; padding: 0px 3px 0px 3px;} +div.summary div.weaknessBox p#weakness-text {margin: 0px; padding: 0px;} + +div.summary div.susceptibleBox {position: absolute; width: 048%; height: 35px; left: 50%; top: 40px; font-size: 12px; text-align: center;} +div.summary div.susceptibleBox img {position: relative; width: 18px; height: 18px; padding: 0px 3px 0px 3px;} +div.summary div.susceptibleBox p#susceptible-text {margin: 0px; padding: 0px;} + +/* Third Sections */ +img.first-third-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 10px;} +img.second-third-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 28px;} +img.third-third-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 43px;} + +.first-third {position: absolute; width: 50%; height: 12px; left: 25px; top: 10px; font-size: 10px; text-align: left;} +.second-third {position: absolute; width: 50%; height: 12px; left: 25px; top: 28px; font-size: 10px; text-align: left;} +.third-third {position: absolute; width: 50%; height: 12px; left: 25px; top: 46px; font-size: 10px; text-align: left;} + +/* Quarter Sections */ +img.first-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 8px;} +img.second-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 23px;} +img.third-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 38px;} +img.forth-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 53px;} +img.fifth-quarter-image {position: absolute; width: 15px; height: 15px; left: 5px; top: 68px;} + +.first-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 10px; font-size: 10px; text-align: left;} +.second-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 26px; font-size: 10px; text-align: left;} +.third-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 40px; font-size: 10px; text-align: left;} +.forth-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 55px; font-size: 10px; text-align: left;} +.fifth-quarter {position: absolute; width: 50%; height: 12px; left: 25px; top: 70px; font-size: 10px; text-align: left;} \ No newline at end of file diff --git a/src/styles/default/settings.css b/src/styles/default/settings.css new file mode 100644 index 0000000..e906e8e --- /dev/null +++ b/src/styles/default/settings.css @@ -0,0 +1,23 @@ +/* Global Settings */ +.nis {background: url("../../images/ui/default/background.png");} +.nistext {color: #E5E6EB;} +a {color: #ffffff; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +a:hover {color: #a19100; text-decoration: underline; cursor: pointer; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} + +/* Buttons */ +.nisbutton {position: relative; width: auto; height: 32px; cursor: pointer; text-align: center; color: #000000; font-family: 'trajan-pro-3'; font-size: 18px; text-shadow: 1px 1px 2px #ECC622; margin: 5px; padding: 0px 12px; line-height: 32px; user-select: none; -webkit-user-select: none; background: url('../../images/ui/default/nisbutton.png') 0px -100%/24px 400% repeat content-box;} +.nisbutton::before {position: absolute; width: 12px; height: 100%; top: 0px; left: 00px; content: ""; background: url('../../images/ui/default/nisbutton.png') 0px 0px / 24px 400%;} +.nisbutton::after {position: absolute; width: 12px; height: 100%; top: 0px; right: 1px; content: ""; background: url('../../images/ui/default/nisbutton.png') -12px 0px / 24px 400%;} +.nisbutton:hover {background-position: 000px -300%;} +.nisbutton:hover::before {background-position: 000px -200%;} +.nisbutton:hover::after {background-position: -12px -200%;} +.nisbutton:active, .nisbutton.fakeactive{-webkit-filter: brightness(1.2); filter: brightness(1.2);} + +/* Main Settings */ +body{font-family:sans-serif; font-size:14px; overflow-x:hidden; margin: 10px; width: calc(100% - 10px)} +h2{border-top:1px solid #000; font-weight:normal;} +h2:first-child{margin-top:5px;} +table{margin:auto;} + +/* Credits */ +#copyright {font-size: 10px; color: #5a6400; text-align:center; padding-top: 3px; height:20px; width: calc(100% - 10px);} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..04af310 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +// Typescript configuration file +{ + "compilerOptions": { + // Settings to make typescript play nice with webpack + "resolvePackageJsonExports": true, + "moduleResolution": "bundler", + "module": "ESNext", + } +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..fddd88f --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,59 @@ +const path = require("path"); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +/** + * @type {import("webpack").Configuration} + */ +module.exports = { + //tell webpack where to look for source files + context: path.resolve(__dirname, "src"), + entry: { + //each entrypoint results in an output file + //so this results in an output file called 'main.js' which is built from src/index.ts + "main": "./index.ts" + }, + output: { + path: path.resolve(__dirname, "dist"), + // library means that the exports from the entry file can be accessed from outside, in this case from the global scope as window.TestApp + library: { type: "umd", name: "SlayerAssistant" } + }, + devtool: 'source-map', + mode: "development", + // prevent webpack from bundling these imports (alt1 libs can use them when running in nodejs) + externals: [ + "sharp", + "canvas", + "electron/common" + ], + resolve: { + extensions: [".wasm", ".tsx", ".ts", ".mjs", ".jsx", ".js"] + }, + module: { + // The rules section tells webpack what to do with different file types when you import them from js/ts + rules: [ + { test: /\.tsx?$/, loader: "ts-loader" }, + { test: /\.css$/, use: ["style-loader", "css-loader"] }, + { test: /\.scss$/, use: ["style-loader", "css-loader", "sass-loader"] }, + // type:"asset" means that webpack copies the file and gives you an url to them when you import them from js + { test: /\.(png|jpg|jpeg|gif|webp)$/, type: "asset/resource", generator: { filename: "[base]" } }, + { test: /\.(html|json)$/, type: "asset/resource", generator: { filename: "[base]" } }, + // file types useful for writing alt1 apps, make sure these two loader come after any other json or png loaders, otherwise they will be ignored + { test: /\.data\.png$/, loader: "alt1/imagedata-loader", type: "javascript/auto" }, + { test: /\.fontmeta.json/, loader: "alt1/font-loader" } + ] + }, + plugins: [ + new CopyWebpackPlugin({ + patterns: [ + { from: 'index.html', to: 'index.html' }, + { from: 'dev-appconfig.json', to: 'appconfig.json' }, + // Folders we need + { from: 'data', to: 'data' }, + //{ from: 'modules', to: 'modules' }, + { from: 'images', to: 'images', globOptions: { ignore: ['**/data/**'] } }, + { from: 'styles', to: 'styles' }, + { from: 'pages', to: 'pages' } + ] + }) + ] +} \ No newline at end of file